如何检查numpy数组是否为空?

kyks70gy  于 12个月前  发布在  其他
关注(0)|答案(4)|浏览(92)

如何检查numpy数组是否为空?
我使用了下面的代码,但如果数组包含零,则会失败。

if not self.Definition.all():

字符串
这是解决办法吗?

if self.Definition == array([]):

hm2xizp9

hm2xizp91#

你可以随时查看.size属性。它是defined as an integer,当数组中没有元素时为零(0):

import numpy as np
a = np.array([])

if a.size == 0:
    # Do something when `a` is empty

字符串

e0bqpujr

e0bqpujr2#

https://numpy.org/devdocs/user/quickstart.html (2020.04.08)
NumPy的主要对象是齐次多维数组。它是一个元素(通常是数字)的表,所有元素都是相同类型的,由非负整数的元组索引。在NumPy中,维度称为轴。(...)NumPy的数组类称为ndarray。(...)ndarray对象的更重要的属性是:

ndarray.ndim

数组的轴数(维度)。

ndarray.shape

数组的维度。这是一个整数元组,表示数组在每个维度上的大小。对于一个n行m列的矩阵,shape将是(n,m)。因此,shape元组的长度是轴的数量ndim。

ndarray.size数组的元素总数。这等于shape的元素的乘积。

wkyowqbh

wkyowqbh3#

但需要注意的是,np.array(None).size返回1!这是因为a.sizeis equivalent tonp.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

huwehgph

huwehgph4#

为什么我们要检查数组是否为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


但是我(和大多数其他人)检查shapesize更多:

In [13]: x.shape
Out[13]: (0,)


另一个对它有利的事情是它“Map”到empty列表:

In [14]: x.tolist()
Out[14]: []


但是还有其他的0 size的数组,它们在最后一种意义上不是“空”的:

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数组来说,情况并非如此。
答案取决于

  • 什么叫“空”?
  • 你到底在测试什么

相关问题