在 NumPy 中,
foo = np.array([[i+10*j for i in range(10)] for j in range(3)])
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]])
filter = np.nonzero(foo > 100)#nothing matches
foo[:,filter]
array([], shape=(3, 2, 0), dtype=int64)
foo[:,0:0]
array([], shape=(3, 0), dtype=int64)
filter2 = np.nonzero(np.sum(foo,axis=0) < 47)
foo[:,filter2]
array([[[ 0, 1, 2, 3, 4, 5]],
[[10, 11, 12, 13, 14, 15]],
[[20, 21, 22, 23, 24, 25]]])
foo[:,filter2].shape
(3, 1, 6)
我有一个“过滤器”条件,我想对所有匹配列的所有行执行操作,但如果过滤器是一个空数组,我的 foo[:,filter] 会以某种方式被广播到一个 3D 数组中。另一个例子是 filter2 -> 再次,当我期待 foo[:,(np.sum(foo,axis=0) < 47)] 的结果时, foo[:,filter2] 给了我一个 3D 数组
有人可以解释 np.nonzero 的正确用例与使用布尔值查找正确的列/索引相比吗?