诚之和:Numpy怎么检查数组全为零的几种方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了诚之和:Numpy怎么检查数组全为零的几种方法相关的知识,希望对你有一定的参考价值。

参考技术A Numpy怎么检查数组全为零的几种方法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面我将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

概要

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

1 numpy.any()

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

importnumpyasnp 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] =-1print('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.1print('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 arrayprint('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.1print(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)))

        报错如下: 

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

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

以上是关于诚之和:Numpy怎么检查数组全为零的几种方法的主要内容,如果未能解决你的问题,请参考以下文章

c语言:生产元素全为零的数组zero[100],将一个整数1随机放入,采用顺序查找法查找并记录步数,

检查字符数组是不是为零的快速方法[重复]

你不可不会的几种移动零的方法

使用花哨的索引从 Numpy 数组中查找和删除全零列

如何创建一个全部为 True 或全部为 False 的 numpy 数组?

你不可不会的几种移动零的方法