2012-11-08 69 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