我有一个像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_
-- 在输出上不会有任何区别,这只是一个偏好的问题。
只适用于1d数组。
a = np.arange(30)
indices = [2, 3, 4]
ia = np.indices(a.shape)
not_indices = np.setxor1d(ia, indices)
a[not_indices] = 888
很明显,没有一个通用的 not
套数的运算符。你的选择是
indices
从一个普遍的指数集中得到的集合(取决于以下形状 a
),但这在实现和读取上会有些困难。for
-循环是你最好的选择,因为你肯定想使用你的索引是排序的这一事实)。)创建一个充满新值的新数组,并有选择地复制旧数组中的索引。
b = np.repeat(888, a.shape)
b[indices] = a[indices]
只是克服了类似的情况,用这种方法解决了。
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