检查 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
。
使用 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
。