如何检查numpy数组是否为空?
我使用了以下代码,但如果数组包含零,则会失败。
if not self.Definition.all():
这是解决方案吗?
if self.Definition == array( [] ):
答案 0 :(得分:208)
您始终可以查看.size
属性。它是defined as an integer,当数组中没有元素时为零(0
):
import numpy as np
a = np.array([])
if a.size == 0:
# Do something when `a` is empty
答案 1 :(得分:15)
http://www.scipy.org/Tentative_NumPy_Tutorial#head-6a1bc005bd80e1b19f812e1e64e0d25d50f99fe2
NumPy的主要对象是同构多维数组。在Numpy中,尺寸称为轴。轴数是等级。 Numpy的数组类称为ndarray。它也被别名数组所知。 ndarray对象的更重要的属性是:
ndarray.ndim
数组的轴数(尺寸)。在Python世界中,维度的数量称为排名。ndarray.shape
数组的大小。这是一个整数元组,表示每个维度中数组的大小。对于具有n行和m列的矩阵,形状将为(n,m)。因此,形状元组的长度是等级或维数,ndim。ndarray.size
数组的元素总数。这等于形状元素的乘积。
答案 2 :(得分:2)
不过,请注意。 请注意,np.array(None).size返回1! 这是因为a.size is equivalent to np.prod(a.shape), np.array(None).shape是(),空乘积是1。
>>> import numpy as np
>>> np.array(None).size
1
>>> np.array(None).shape
()
>>> np.prod(())
1.0
因此,我使用以下代码测试numpy数组是否具有元素:
>>> def elements(array):
... return array.ndim and array.size
>>> elements(np.array(None))
0
>>> elements(np.array([]))
0
>>> elements(np.zeros((2,3,4)))
24
答案 3 :(得分:-3)
我们为什么要检查数组是否为empty
?数组不会像列表一样增长或缩小。从“空”数组开始,到np.append
增长是新手经常犯的错误。
使用if alist:
中的列表取决于其布尔值:
In [102]: bool([])
Out[102]: False
In [103]: bool([1])
Out[103]: True
但是尝试对数组执行相同操作会产生(在版本1.18中):
In [104]: bool(np.array([]))
/usr/local/bin/ipython3:1: DeprecationWarning: The truth value
of an empty array is ambiguous. Returning False, but in
future this will result in an error. Use `array.size > 0` to
check that an array is not empty.
#!/usr/bin/python3
Out[104]: False
In [105]: bool(np.array([1]))
Out[105]: True
和bool(np.array([1,2])
会产生臭名昭著的歧义错误。
可接受的答案提示size
:
In [11]: x = np.array([])
In [12]: x.size
Out[12]: 0
但是我(和大多数其他人)对shape
的检查要比对size
的检查要多:
In [13]: x.shape
Out[13]: (0,)
另一有利之处是它“映射”到empty
列表:
In [14]: x.tolist()
Out[14]: []
但是还有其他{0} size
为0的其他数组,它们在最后意义上不是“空”的:
In [15]: x = np.array([[]])
In [16]: x.size
Out[16]: 0
In [17]: x.shape
Out[17]: (1, 0)
In [18]: x.tolist()
Out[18]: [[]]
In [19]: bool(x.tolist())
Out[19]: True
np.array([[],[]])
的大小也是0,但形状(2,0)和len
2。
虽然empty
列表的概念定义明确,但empty array
的定义并不明确。一个空列表等于另一个。对于size 0
数组,不能这么说。
答案真的取决于