12

次の行が期待どおりに機能しないのはなぜですか?

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]

乾杯、フィリップ

4

4 に答える 4

10

これは、派手な索引付けがどのように機能するかに関連しています。ここに徹底的な説明があります。これは、ファンシーインデックス(つまりa[x>3] *= 2)を使用したインプレース変更を可能にするためにこのように行われます。この結果、見つけたようにダブルインデックスに割り当てることができなくなります。ファンシーインデックスは、ビューではなく常にコピーを返します。

于 2009-11-06T14:01:06.930 に答える
8

そのようなダブルスライスを介して割り当てを行うことはできないようです。

ただし、これは機能します。

a[numpy.where(a==1)[0][1:]] = 3
于 2009-11-06T13:53:36.497 に答える
3

a [a==1]の部分は実際にはスライスではないためです。新しい配列を作成します。あなたがそれについて考えるとき、それは理にかなっています-あなたはブール条件を満たす要素だけを取っています(フィルター操作のように)。

于 2009-11-06T13:36:06.937 に答える
0

これはあなたが望むことをします

a[2:][a[2:]==1]=3
于 2009-11-06T13:59:42.273 に答える