2017-04-01 243 views
1

有點棘手用幾句話解釋它(谷歌),這樣:Python的 - 從一維數組使用值作爲二維數組列索引

我有這樣的2D NP陣列:

import numpy as np 

x = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11],[12,13,14],[15,16,17]]) 

這1D NP陣列:

y = np.array([0,2,1,0,2,0]) 

我想要做的就是從X使用Ÿ爲(列)指數收益率的列值,所以它會返回是這樣的:

[0, 5, 7, 9, 14, 15] 

在醜陋的代碼會被解決這樣的:

for row,col in zip(x,y): 
    print(row[col]) 

,並在不那麼醜陋的代碼:

[row[col] for row,col in zip(x,y)] 

有另一種方式解決這個問題?我想這樣的:

x[y] 

或numpy特定功能。

回答

1

您可以使用高級索引:

x[np.arange(6), y] 
# array([ 0, 5, 7, 9, 14, 15]) 
+0

非常感謝你,是非常完美漂亮:) – JackS

0

是的,它是更好地與numpy的做到這一點,因爲它比與循環做快好幾倍。我的建議是使用np.ix_()功能切片陣列,並且採取對角線結果通過值從每行獲得:

np.diag(x[np.ix_(range(0, np.shape(x)[0]), y)])