1
3D ndarrayの特定の軸(0)に沿った最大値のインデックスを見つけようとしています。これらのインデックスを使用してこれらの値をスライスします第2の並列アレイからの対応する値)を含む。例えば、ndarrayの軸に沿って最大値を抽出するスライシング
> a = np.random.randint(10, 100, 24).reshape(2, 3, 4)
> print(a)
array([[[94, 22, 96, 44],
[11, 85, 39, 85],
[58, 43, 48, 84]],
[[84, 58, 51, 30],
[74, 89, 90, 11],
[90, 54, 94, 20]]])
は今、私は、すなわち
> a[inds]
array([[94, 58, 96, 44],
[74, 89, 90, 85,],
[90, 54, 94, 84,]])
ゼロ番目の軸の上に最大である値を与える指標に興味a.argmax()
を使用すると、0番目の軸のインデックスがある与えます最大、すなわち
> a.argmax(axis=0)
array([[0, 1, 0, 0],
[1, 1, 1, 0],
[1, 1, 1, 0]])
しかし、これは...スライスでは動作しません
素晴らしい感謝!私は高度なインデックス作成でブラシをかける必要があります...しかし、3番目の軸( 'np.arange(a.shape [2])')へのインデックスが追加の次元(つまり、 'np.arange(a.shape [2])[:, None]')にブロードキャストされますか? – DilithiumMatrix
@DilithiumMatrix Nah、私たちはする必要はありません。そのため、 '明示的方法'のように 'np.arange(a.shape [2])'も同様に機能します。しかし、 'np.arange(a.shape [2])[None]'を持つ 'np.ogrid'(先ほど示した)のようにadditonal dimを使用すると、どちらも傷つきません。 – Divakar
@DilithiumMatrix 'inds'は'(m、n) 'の淡色になります。 'np.arange(m)'は 'inds'の第1軸に沿っているので、' np.arange(m) 'は' inds'の第2軸に沿って拡張する必要があります。したがって、最初の範囲配列を拡張する必要があり、2番目の配列はインデックス作成時に 'inds'の最初の軸に沿って自動的に拡張されるため、2番目の配列は拡張しないでください。 – Divakar