複数のスライス配列を使用して別々の次元に沿ってndarrayをスライスしようとすると、numpyブロードキャストエラーの原因を理解できません。 data
インデックス配列picks
(例:np.arange(2,306,3))とブール値配列mask
(ここで、mask.shape
は(481))を使用して、第1次元と第2次元に沿ってndarray(100,306,481) )のうち、361個の要素がTrue
です。Numpy ndarrayが配列でスライスする
data[:, picks, mask]
戻り
IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (102,) (361,)
しかしdata[:, :, mask]
、data[:, picks, :]
、およびdata[:, :10, mask]
作業予想通り。
この場合、どのように放送が行われますか?これを行うためのpythonicの方法は何ですか? picks
は(361)の要素を持っていた
に便利です'(100、len(picks)、len(mask))'のような形状のスライスであれば、 'data [:、picks [:, np.newaxis]、マスク] '。 '(m、)'と '(n、)'の形で配列を放送することはできませんが、 '(m、1)'と '(n、)'で行うことができます。 –
また、関数 'np.ix_'をチェックすることもできます。上記は 'data [np.ix_(arange(100)、picks、mask)]'に相当します。 –