2016-01-05 30 views
5

4D配列の 'a'にはサイズ(2,3,4,4)の0が入ります。4D配列をインデックスするNumPy配列

import numpy as np 
a = np.zeros((2,3,4,4)) 

Iはまた、いくつかの指標値(全て0〜3)を担持サイズの3次元アレイ 'B'(2,3,4)を有します。私が何をしたいか

は1

私にできることで、「A」「B」のインデックスに対応(「A」の4次元)にすべての最後の配列の要素を交換ですforループ3と、この、以下に示すよう:

for i in a.shape[0]: 
    for j in a.shape[1]: 
     for z in a.shape[2]: 
      a[i,j,z][b[i,j,z]] = 1 

しかし、いずれにせよ、私は全くのループを回避することができますがあれば、私は思っていました。

a[b] = 1 

答えて

4

はいあなたはベクトル化の形でこれを行うことができます:に似た何か

p,m,n,r = a.shape 
a.reshape(-1,r)[np.arange(p*m*n),b.ravel()] = 1 

これは、より高次のndarraysに、より簡単に一般化すべきです。

関連する問題