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

Kic*_*ano 137 python numpy

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

我使用了以下代码,但如果数组包含零,则会失败.

if not self.Definition.all():
Run Code Online (Sandbox Code Playgroud)

这是解决方案吗?

if self.Definition == array( [] ):
Run Code Online (Sandbox Code Playgroud)

Jos*_*del 245

您始终可以查看该.size属性.它被定义为一个整数,0当数组中没有元素时,它是零():

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

if a.size == 0:
    # Do something when `a` is empty
Run Code Online (Sandbox Code Playgroud)

  • 一个快速等效的“if not a.size:” (4认同)
  • NumPy 代码通常无法在列表上正常工作,反之亦然。如果您使用列表与 NumPy 数组,则必须以不同的方式编写代码。 (3认同)
  • 这对numpy很有用,但不幸的是,对于列表而言,它被认为是非Python的。请查看有关列表的讨论:/sf/ask/3745941/对于numpy数组和列表使用相同的模式会很好。 (2认同)

Col*_*nic 20

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
数组元素的总数.这等于形状元素的乘积.


use*_*557 6

不过,请注意。请注意,np.array(None).size返回1!这是因为a.size 等于 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
Run Code Online (Sandbox Code Playgroud)

因此,我使用以下命令测试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
Run Code Online (Sandbox Code Playgroud)

  • 形状为“()”的数组是标量数组,它包含一个元素(标量)。在这个例子中,标量是“None”(“None”没有任何特殊含义,这只是一个对象数组)。这取决于您正在做什么,但您很可能确实希望将标量数组视为不为空。 (5认同)
  • 包含“ None”对象的数组不是空数组,[请参见此处的答案以获取更多详细信息](/sf/ask/1363122981/) (3认同)
  • @DrBwts 这与这个答案无关。 (2认同)