次のような NumPy 配列があります。
a = np.arange(30)
indices=[2,3,4]
たとえば、派手なインデックス付けを使用して、位置にある値を置き換えることができることを知っています。
a[indices] = 999
しかし、にない位置の値を置き換える方法はindices
? 以下のようなものでしょうか?
a[ not in indices ] = 888
次のような NumPy 配列があります。
a = np.arange(30)
indices=[2,3,4]
たとえば、派手なインデックス付けを使用して、位置にある値を置き換えることができることを知っています。
a[indices] = 999
しかし、にない位置の値を置き換える方法はindices
? 以下のようなものでしょうか?
a[ not in indices ] = 888
私はこのようなことをするためのきれいな方法を知りません:
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_
。出力に違いはありません。それは本当に好みの問題です。
明らかにnot
、セットの一般的な演算子はありません。選択肢は次のとおりです。
indices
インデックスのユニバーサル セットからセットを減算します( の形状によって異なりますa
) が、これを実装して読み取るのは少し難しくなります。for
インデックスがソートされているという事実を確実に使用したいので、ループが最善の策です)。新しい値で満たされた新しい配列を作成し、古い配列からインデックスを選択的にコピーします。
b = np.repeat(888, a.shape)
b[indices] = a[indices]