在NumPy中是否有类似Matlab中的isempty()函数?

7

我在Matlab中有这段代码:

switch 1
    case isempty(A) 
...

在numpy中如何检查二维数组A是否为空(只有0值)?


1
这是一个相当晚的评论,但我刚刚来到这个问题,试图将一些matlab代码翻译成python。问题中有一个错误的假设(至少对于现在的matlab工作方式):isempty()并不检查“仅包含零”,而是检查“至少一个维度的长度为零”(),意味着A没有内容。因此,答案应该是A.size == 0,如此处所述:https://dev59.com/HWgu5IYBdhLWcg3we3Ct - NicoH
3个回答

10

要检查一个数组是否为空(即不包含任何元素),您可以使用 A.size == 0

import numpy as np
In [2]: A = np.array([[1, 2], [3, 4]])

In [3]: A.size
Out[3]: 4

In [4]: B = np.array([[], []])

In [5]: B.size
Out[5]: 0

为了检查它是否只包含0,您可以检查np.count_nonzero(A)

In [13]: Y = np.array([[0, 0], [0, 0]])
In [14]: np.count_nonzero(Y)
Out[14]: 0

谢谢。我认为Matlab代码试图使用isempty()来判断数组是否只包含0。所以我猜size不起作用。所以我尝试你的第二个方法 :) - gustavgans

6

您可以将数组x与0进行比较,看所有值是否都为False。

np.all(x==0)


0
>>> empty_array = np.zeros((3,3))
>>> empty_array
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> if np.all(empty_array==0): print True
... 
True
>>> empty_array[1][1]=1
>>> empty_array
array([[ 0.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  0.]])
>>> if np.all(empty_array==0): 
...    print True
... else:
...    print False
... 
False

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接