如何在数组/张量中对指定索引之外的其余索引进行索引操作?
问题:为NumPy数组中除指定索引列外的所有列添加值c
首先定义原始数组和索引:
import numpy as np x = np.array([[0, 1, 0, 0, 0], [0, 0, 0, 1, 0], [1, 0, 0, 0, 0]]) idx = np.array([3, 1, 0]) # 索引范围对应x的列索引(0到列数-1)
我们已经知道,要为x中idx指定的对应位置添加值c,可以用以下代码:
c = 2 # 示例值,可替换为任意数值 x[range(3), idx] += c
执行后得到的结果是:
x = np.array([[ 0, 1, 0, c, 0], [ 0, c, 0, 1, 0], [1+c, 0, 0, 0, 0]])
现在需要实现的是:为x中除idx指定索引之外的所有列添加值c,期望得到的结果如下:
x = np.array([[c, 1+c, c, 0, c], [c, 0, c, 1+c, c], [1, c, c, c, c]])
解决方案
可以通过两种实用方式实现:
方法一:全局加c后回退指定位置
先对整个数组的所有元素加上c,再将idx指定的位置减去c,等价于仅给非指定列添加c:
x += c x[range(x.shape[0]), idx] -= c
方法二:利用掩码数组定位目标区域
创建与x形状一致的布尔掩码,将idx指定的位置设为False,其余位置设为True,再通过掩码给对应区域加c:
mask = np.ones(x.shape, dtype=bool) mask[range(x.shape[0]), idx] = False x[mask] += c
两种方法都能得到期望结果,可根据实际场景选择使用。
内容的提问来源于stack exchange,提问作者Omar AlSuwaidi
相关产品推荐
相关产品推荐

