## 问题：如何检查numpy数组是否为空？

``if not self.Definition.all():``

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

How can I check whether a numpy array is empty or not?

I used the following code, but this fails if the array contains a zero.

``````if not self.Definition.all():
``````

Is this the solution?

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

## 回答 0

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

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

You can always take a look at the `.size` attribute. It is defined as an integer, and is zero (`0`) when there are no elements in the array:

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

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

## 回答 1

NumPy的主要对象是齐次多维数组。在Numpy中，尺寸称为轴。轴数为等级。Numpy的数组类称为ndarray。别名数组也知道它。ndarray对象的更重要的属性是：

ndarray.ndim

ndarray.shape

ndarray.size

NumPy’s main object is the homogeneous multidimensional array. In Numpy dimensions are called axes. The number of axes is rank. Numpy’s array class is called ndarray. It is also known by the alias array. The more important attributes of an ndarray object are:

ndarray.ndim
the number of axes (dimensions) of the array. In the Python world, the number of dimensions is referred to as rank.

ndarray.shape
the dimensions of the array. This is a tuple of integers indicating the size of the array in each dimension. For a matrix with n rows and m columns, shape will be (n,m). The length of the shape tuple is therefore the rank, or number of dimensions, ndim.

ndarray.size
the total number of elements of the array. This is equal to the product of the elements of shape.

## 回答 2

``````>>> import numpy as np
>>> np.array(None).size
1
>>> np.array(None).shape
()
>>> np.prod(())
1.0``````

``````>>> 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``````

One caveat, though. Note that np.array(None).size returns 1! This is because a.size is equivalent to np.prod(a.shape), np.array(None).shape is (), and an empty product is 1.

``````>>> import numpy as np
>>> np.array(None).size
1
>>> np.array(None).shape
()
>>> np.prod(())
1.0
``````

Therefore, I use the following to test if a numpy array has elements:

``````>>> 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

``````In [102]: bool([])
Out[102]: False
In [103]: bool([1])
Out[103]: True``````

``````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])`产生臭名昭著的歧义错误。

Why would we want to check if an array is `empty`? Arrays don’t grow or shrink in the same that lists do. Starting with a ’empty’ array, and growing with `np.append` is a frequent novice error.

Using a list in `if alist:` hinges on its boolean value:

``````In [102]: bool([])
Out[102]: False
In [103]: bool([1])
Out[103]: True
``````

But trying to do the same with an array produces (in version 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
``````

and `bool(np.array([1,2])` produces the infamous ambiguity error.