Numpy如何检查数组全为零的⼏种⽅法
⽬录
概要
1 numpy.any()
unt_nonzero()
3 numpy.all()
4. 多维数组可以分axis进⾏判断
概要
简单介绍⼏种⽤于判断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节。
unt_nonzero()
print('o()...')
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?: ', unt_nonzero(a))
o()...
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教程 pdf报错如下:
⽽“~”是所谓的Bitwise NOT operator.
如果"~"的输⼊是⼀个整数的的话,它会将输⼊数的所有⽐特都取反。如果是⼀个numpy 数组的话,则会对其中每⼀个数执⾏按位逻辑取反操作。如果是⼀个numpy布尔类型(True, False)数组的话,则会对其中每⼀个布尔数执⾏逻辑取反操作--以上例⼦中正是这种⽤法。
到此这篇关于Numpy如何检查数组全为零的⼏种⽅法的⽂章就介绍到这了,更多相关Numpy 检查数组全为零内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论