34

次のような NumPy 配列があります。

a = np.arange(30)

indices=[2,3,4]たとえば、派手なインデックス付けを使用して、位置にある値を置き換えることができることを知っています。

a[indices] = 999

しかし、にない位置の値を置き換える方法はindices? 以下のようなものでしょうか?

a[ not in indices ] = 888
4

4 に答える 4

48

私はこのようなことをするためのきれいな方法を知りません:

mask = np.ones(a.shape,dtype=bool) #np.ones_like(a,dtype=bool)
mask[indices] = False
a[~mask] = 999
a[mask] = 888

もちろん、numpy データ型を使用したい場合は、次を使用できますdtype=np.bool_。出力に違いはありません。それは本当に好みの問題です。

于 2013-06-05T13:17:29.303 に答える
4

明らかにnot、セットの一般的な演算子はありません。選択肢は次のとおりです。

  1. indicesインデックスのユニバーサル セットからセットを減算します( の形状によって異なりますa) が、これを実装して読み取るのは少し難しくなります。
  2. ある種の反復(おそらく、forインデックスがソートされているという事実を確実に使用したいので、ループが最善の策です)。
  3. 新しい値で満たされた新しい配列を作成し、古い配列からインデックスを選択的にコピーします。

    b = np.repeat(888, a.shape)
    b[indices] = a[indices]
    
于 2013-06-05T13:14:41.630 に答える