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

时间:2015-05-05 01:42:57

标签: python matlab numpy code-translation

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

在MATLAB中,这很容易

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

2 个答案:

答案 0 :(得分:4)

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

在您的示例中,您的代码询问:没有索引,其中matrix_a小于matrix_b?

not (matrix_a < matrix_b).any()

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

(matrix_a >= matrix_b).all()

答案 1 :(得分:3)

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

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

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

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

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

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

np.any(a>98)

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

所以我对isempty(find...))快速len(a[...])==0外观的新提名是kolakoski :: () -> [Int] kolakoski () = 1 : 2 : helper () where helper () = 2 : concat (zipWith replicate (helper ()) (cycle [1, 2]))