使用numpy函数numpy.nonzero
,是否有一种优雅的方法来检查作为输出的元组是否为空数组?
在MATLAB中,这很容易
即
answer = find( matrix_a < matrix_b );
isempty(answer)
答案 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]))
。