2017-06-05 15 views
1

2次元配列の各行で1つの要素を減らす場合は、各行に1つのインデックスを指定します。だから、基本的に、私は次のようにベクトル化したい:numpy配列の各行の1つの要素を列インデックスで修正する

for row, col in enumerate(indices): 
    array[row,col] -= 1 

私はnumpy.chooseを使用して変更したい要素を選択することができますが、その後、残念ながら、これらの要素は、単にコピーされます。換言すれば、このようなものは動作しません:

selection = np.choose(indices, array.T) 
selection -= 1 

答えて

1

使用integer array indexingベクトル化アクセスので、割り当てのために -

array[np.arange(len(indices)), indices] -= 1 
+0

クール。私たちは範囲を取り除くことができないと思いますか? – purefanatic

+0

いいえ、私たちはそれを取り除くことはできません。このようなレンジ配列の作成は、実際には高価ではありません。 – Divakar

関連する問題