私は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_
を使用できます-出力に違いはありません。本当に好みの問題です。
1次元配列でのみ機能します。
a = np.arange(30)
indices = [2, 3, 4]
ia = np.indices(a.shape)
not_indices = np.setxor1d(ia, indices)
a[not_indices] = 888
ちょうど同じような状況を克服し、このように解決しました:
a = np.arange(30)
indices=[2,3,4]
a[indices] = 999
not_in_indices = [x for x in range(len(a)) if x not in indices]
a[not_in_indices] = 888
セットには一般的なnot
演算子はありません。選択肢は次のとおりです。
indices
セットをインデックスのユニバーサルセットから減算すると(a
の形状によって異なります)、実装と読み取りが少し難しくなります。for
- loopが最善の策です)。新しい値で満たされた新しい配列を作成し、古い配列からインデックスを選択的にコピーします。
b = np.repeat(888, a.shape)
b[indices] = a[indices]