检查 numpy.nonzero 的空结果的优雅方法

Elegant way to check empty result of numpy.nonzero

使用 numpy 函数 numpy.nonzero,是否有一种优雅的方法来检查作为输出的元组是否为空数组?

在 MATLAB 中,这很容易

answer = find( matrix_a < matrix_b );
isempty(answer)

这样做的 numpythonic 方法是直接在 ndarray 对象上使用 any/all 方法。

在您的示例中,您的代码询问:是否有 no indices where matrix_a is less than matrix_b?

not (matrix_a < matrix_b).any()

等价地,matrix_a是否所有元素都大于matrix_b中对应的元素?

(matrix_a >= matrix_b).all()

对于a (10,10) 范围(100)

In [201]: np.nonzero(a>100)
Out[201]: (array([], dtype=int32), array([], dtype=int32))

nonzero returns 一个元组,每个维度都有一个数组。该元组可用于索引条件为真的所有元素。

因此您可以通过查看其中一个数组的长度来测试 'empty' nonzero

len(np.nonzero(a>98)[0])==0
布尔掩码上的

any 看起来更简单,但在快速测试中,它实际上更慢。

np.any(a>98)

MATLAB 'find' returns 匹配的项。 numpy 等价物是 a[np.nonzero(a>100)],或者直接使用布尔掩码 a[a>100]

所以我的快速 isempty(find...)) 相似的新提名是 len(a[...])==0