ナンパイでは、
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 配列にブロードキャストされます。もう 1 つの例は filter2 です -> 再び、foo[:,filter2] は foo[:,(np.sum(foo,axis=0) < 47)] の結果を期待しているときに 3D 配列を提供します
ブール値を使用して正しい列/インデックスを見つけることと比較して、 np.nonzero の適切な使用例を誰かが説明できますか?