2012-11-08 177 views
3

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

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

这样做的动机是从矢量场中提取矢量子集。

回答

4

这应该很好地工作:

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

一般:

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

第一个版本我想要做什么,但只有当y'的'维数是事先知道的。第二个是一般的,但可悲的是似乎很慢(在我的一个测试中慢了20倍)。 – amaurea