说我有一个原始数组
[:, 2, :, 1]
我正在使用子集w
。在这个子集上,我有一个数组告诉我是否应该更新update = array([[False, True], [False, True]])
。
update[0, 1] == True
基本上,w[0, 2, 1, 1]
意味着w
应该增加:第一个(0)维度对应w
中的0维度,第二个维度对应{{1}中的维度2 }}。尺寸1和3固定为(2, 1)
(因为那是我操作的子集)。
现在,我想对w
隐含的维度产生update
的影响。基本上,我正在寻找index
,这样做时
w[index] = 0
我设置为0个元素[0, 2, 1, 1]
和[1, 2, 1, 1]
。
如果w
只是我的2x2
数组,我可以通过w[update] = 0
执行此操作,但我必须考虑其中的其他维度。我怎么干净利落地做到这一点?
现在,我没有处理简单的子集[:, 2, :, 1]
,而是处理更复杂的事情。
我有一个名为secondDim的数组
secondDim = np.array([2, 3])
它包含第二维作为第一维的函数。也就是说,当第一维度等于0时,我将第二维度切片为2.当第一维度等于1时,我将第二维度切片为3.
现在,我正在寻找index
,这样当我设置
w[index] = 0
我设置为0个元素[0, secondDim[0], 1, 1]
和[1, secondDim[1], 1, 1]
- 即[0, 2, 1, 1]
和[1, 3, 1, 1]
。
答案 0 :(得分:2)
Part - 1
只需w[:,2,:,1][update] = 0
即可。
第2部分
一种方法是存储来自mask
的行,col索引并使用subscripted-indexing
-
r,c = np.where(update)
a[r,secondDim,c,1] = 0
示例运行 -
In [213]: a = np.random.randint(11,99,[2, 4, 2, 3])
In [222]: secondDim
Out[222]: array([2, 3])
In [216]: update # For first and third dims
Out[216]:
array([[False, True],
[False, True]], dtype=bool)
In [214]: a[0, 2, 1, 1]
Out[214]: 85
In [215]: a[1, 3, 1, 1]
Out[215]: 47
In [217]: r,c = np.where(update)
In [218]: a[r,secondDim,c,1] # access those elems
Out[218]: array([85, 47])
In [219]: a[r,secondDim,c,1] = 0 # assign 0s
In [220]: a[0, 2, 1, 1] # verify
Out[220]: 0
In [221]: a[1, 3, 1, 1] # verify
Out[221]: 0
我们也可以将此方法用于part-1
-
w[r,2,c,1] = 0