关于python:使用其他数组切片numpy数组

Slice numpy array with other array

我试图提取一个numpy数组y的子集,该数组由x中包含的一组索引指定,但仍保留一些y的索引是免费的。举个具体的例子。让y(10,10,10,3)的形状,x(7,7,3)的形状。x的最后一个维度对应于y的前三个维度的指标信息。也就是说,我想要一个高效的切片操作,其结果与此相同:

1
2
3
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的维度数量如何,答案都是有效的。

一般情况下,yN+1维,形状为(...,N)xQ+1维,形状为(...,N),其结果与x相同。

其动机是从向量场中提取向量的子集。


这应该可以很好地工作:

1
y[x[..., 0], x[..., 1], x[..., 2]]

一般来说:

1
y[tuple(np.rollaxis(x, -1))]