次の行が期待どおりに機能しないのはなぜですか?
import numpy as np
a = np.array([0,1,2,1,1])
a[a==1][1:] = 3
print a
>>> [0 1 2 1 1]
# I would expect [0 1 2 3 3]
これは「バグ」ですか、それともこれに対する別の推奨される方法がありますか?
一方、次のように動作します。
a[a==1] = 3
print a
>>> [0 3 2 3 3]
乾杯、フィリップ
次の行が期待どおりに機能しないのはなぜですか?
import numpy as np
a = np.array([0,1,2,1,1])
a[a==1][1:] = 3
print a
>>> [0 1 2 1 1]
# I would expect [0 1 2 3 3]
これは「バグ」ですか、それともこれに対する別の推奨される方法がありますか?
一方、次のように動作します。
a[a==1] = 3
print a
>>> [0 3 2 3 3]
乾杯、フィリップ
これは、派手な索引付けがどのように機能するかに関連しています。ここに徹底的な説明があります。これは、ファンシーインデックス(つまりa[x>3] *= 2
)を使用したインプレース変更を可能にするためにこのように行われます。この結果、見つけたようにダブルインデックスに割り当てることができなくなります。ファンシーインデックスは、ビューではなく常にコピーを返します。
そのようなダブルスライスを介して割り当てを行うことはできないようです。
ただし、これは機能します。
a[numpy.where(a==1)[0][1:]] = 3
a [a==1]の部分は実際にはスライスではないためです。新しい配列を作成します。あなたがそれについて考えるとき、それは理にかなっています-あなたはブール条件を満たす要素だけを取っています(フィルター操作のように)。
これはあなたが望むことをします
a[2:][a[2:]==1]=3