Numpy如何检查数组全为零的几种方法

作者:笨牛慢耕 时间:2023-05-16 12:00:25 

概要

        简单介绍几种用于判断numpy数组是否全零的测试方法。

1 numpy.any()

        numpy.any()函数用于检查一个numpy数字是否存在任何一个非0元素,因此将numpy.any()的结果取反即得“numpy数组是否全0”的结果。例如:      


import numpy as np

print('Using numpy.any()...')
a_1D = np.zeros(5)
print('Is a_1D all zeros?: ', not(np.any(a_1D)))
print('Is a_1D all zeros?: ', ~(np.any(a_1D)))
a_1D[2] = -1
print('Is a_1D all zeros?: ', not(np.any(a_1D)))

a_2D = np.zeros((2,3))
print(a_2D)
print('Is a_2D all zeros?: ', not(np.any(a_2D)))
a_2D[1,2] = 0.1
print('Is a_2D all zeros?: ', not(np.any(a_2D)))

输出结果:

        Using numpy.any()...
        Is a_1D all zeros?:  True
        Is a_1D all zeros?:  True
        Is a_1D all zeros?:  False
        [[0. 0. 0.]
         [0. 0. 0.]]
        Is a_2D all zeros?:  True
        Is a_2D all zeros?:  False

        注意,python中逻辑取反可以用"~"也可以用"not",但是不能用“!”(“!=”是比较运算符--comparison operator, 只能用于比如说"b!=c"这样)。另外,"~"和"not"也是有区别的,参见以下第4节。

2 numpy.count_nonzero()

      numpy.count_nonzero()用于对数组的0元素个数进行计数,因此也可以用来执行是否全0的判断。用法如下:


print('Using numpy.nonzero()...')
a = np.array([1,2,3,0,0,1])
print('Number of zeros in a = ',np.count_nonzero(a))
print('Is a all zeros?: ', np.count_nonzero(a)==0)
a[:] = 0 # Force a to all-zeros array
print('Is a all zeros?: ', np.count_nonzero(a)==0)
print('Is a all zeros?: ', not np.count_nonzero(a))

        Using numpy.nonzero()...
        Number of zeros in a =  4
        Is a all zeros?:  False
        Is a all zeros?:  True
        Is a all zeros?:  True 

3 numpy.all()  

        用numpy.all()也可以实现这一功能。以下例子利用了python内部会自动进行0--False, 1--True的转换。


print('')
print('Using numpy.all()...')
a = np.zeros(10)
print('Is a all zeros?: ', np.all(a==0))

        Using numpy.all()...
        Is a all zeros?:  True 

4. 多维数组可以分axis进行判断

        对于多维数组(这正是numpy正真发挥强悍实力的地方)以上函数在缺省情况下是对整个数组进行统一判断,但是也可以通过axis参数指定沿指定轴分别处理。如下例所示:


print('')
print('Judge according to the specified axis')
a_2D = np.zeros((2,3))
a_2D[1,2] = 0.1
print(a_2D)
print('Is each col of a_2D all zeros?: ', ~(np.any(a_2D, axis=0)))
print('Is each row of a_2D all zeros?: ', ~(np.any(a_2D, axis=1)))

Judge according to the specified axis
[[0.  0.  0. ]
 [0.  0.  0.1]]
Is each col of a_2D all zeros?:  [ True  True False]
Is each row of a_2D all zeros?:  [ True False]

        当指定axis=0时相当于对2维数组按列判断是否全0,指定axis=1时相当于对2维数组按行判断是否全0。当然,这里所说的行和列的概念是从传统的2维数组或者矩阵里继承而来的概念,当考虑更高维数组的时候,行和列这个概念就不再适用了。关于高维数组(也称:Tensor,张量)的axis将另文介绍。

        另外,前面提到表示逻辑取反的“~”和“not”是有所不同的。具体来说就是,not只接受一个操作数,因此以上这个例子如果将"~"改为not的话会报错,如下所示:


print('Is each col of a_2D all zeros?: ', not(np.any(a_2D, axis=0)))
print('Is each row of a_2D all zeros?: ', not(np.any(a_2D, axis=1)))

        报错如下: 

Numpy如何检查数组全为零的几种方法

        而“~”是所谓的Bitwise NOT operator.

        如果"~"的输入是一个整数的的话,它会将输入数的所有比特都取反。如果是一个numpy 数组的话,则会对其中每一个数执行按位逻辑取反操作。如果是一个numpy布尔类型(True, False)数组的话,则会对其中每一个布尔数执行逻辑取反操作--以上例子中正是这种用法。

来源:https://blog.csdn.net/chenxy_bwave/article/details/120798048

标签:Numpy,检查,数组
0
投稿

猜你喜欢

  • MySQL 基本概念

    2011-09-10 16:22:34
  • django queryset相加和筛选教程

    2022-09-10 11:04:43
  • isset和empty的区别

    2023-11-20 12:24:08
  • TOPI如何使TVM代码不那么样板化

    2022-02-02 00:22:07
  • JavaScript实现字符串与日期的互相转换及日期的格式化

    2024-06-05 09:13:33
  • Golang中的time.Duration类型用法说明

    2024-05-02 16:24:12
  • MySQL索引优化实例分析

    2024-01-26 18:34:27
  • 23个MySQL数据库安全使用技巧

    2007-10-26 16:02:00
  • 在Docker上部署Python的Flask框架的教程

    2023-03-27 02:55:38
  • PHP实现打包下载文件的方法示例

    2024-05-11 09:45:54
  • 教你一分钟在win10终端成功安装Pytorch的方法步骤

    2023-09-01 19:32:38
  • 利用python实现简单的循环购物车功能示例代码

    2021-05-12 14:52:58
  • python实现ip代理池功能示例

    2023-07-30 16:36:06
  • 教你使用Python画圣诞树做浪漫的程序员

    2023-03-19 21:39:02
  • python序列类型种类详解

    2022-02-27 13:53:38
  • 如何优化Mysql千万级快速分页

    2024-01-17 03:37:47
  • 快速解决jupyter notebook启动需要密码的问题

    2023-09-27 23:56:49
  • 使用vue3实现一个人喵交流小程序

    2024-04-27 16:03:21
  • 使用tensorflow实现AlexNet

    2023-08-10 08:29:30
  • VML模拟Rose画流程图代码

    2008-09-02 10:58:00
  • asp之家 网络编程 m.aspxhome.com