在NumPy的,非broadcastable輸出操作數numpy的2D澆鑄成3D
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 - > again,foo [:,filter2]給我一個3D數組,當我期待foo [:,(np.sum(foo,axis = 0)< 47)]
有人可以解釋一下np.nonzero的正確用例與使用布爾值來查找正確的列/索引的比較嗎?