我正在尝试提取由y
中包含的一组索引指定的numpy数组x
的子集,同时仍然保留一些y
的索引。举个具体的例子。让y
具有形状(10,10,10,3)
,而x
具有形状(7,7,3)
。 x
的最后一个维度对应于y
的前三个维度的索引信息。也就是说,我想要一个有效的切片操作,结果如下:
for i in x.shape[0]:
for j in x.shape[1]:
z[i,j,:] = y[x[i,j,0],x[i,j,1],x[i,j,2],:]
理想情况下,无论x
的维数是多少,答案都会有效。
一般来说,y
为N+1
- 维,形状为(...,N)
,而x
为Q+1
- 维度为(...,N)
},结果与x
具有相同的形状。
这样做的动机是从矢量场中提取矢量子集。
答案 0 :(得分:4)
这应该合理地运作:
y[x[..., 0], x[..., 1], x[..., 2]]
一般来说:
y[tuple(np.rollaxis(x, -1))]