2017-02-14 120 views
1

我不明白如何切片數組,以便獲得第三維中感興趣的索引。這裏是一個3D numpy數組的例子。通過索引列表切片3D numpy數組

data = np.arange(60).reshape(5,4,3) 
print data 

[[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 

[[12 13 14] [15 16 17] [18 19 20] [21 22 23]] 

[[24 25 26] [27 28 29] [30 31 32] [33 34 35]] 

[[36 37 38] [39 40 41] [42 43 44] [45 46 47]] 

[[48 49 50] [51 52 53] [54 55 56] [57 58 59]]] 

現在這裏是我想從第三維獲取的索引。

indices_of_interest = np.random.randint(3,大小= 5) 打印indices_of_interest

[0 2 2 2 0] 

所以基本上我希望值

[[[ 0] [ 3] [ 6] [ 9]] 

[[14] [17] [20] [23]] 

[[26] [29] [32] [35]] 

[[38] [41] [44] [47]] 

[[48] [51] [54] [57]]] 

是否有某種方式來做到這一點?當我嘗試直接對數組進行索引時,它會廣播維度,而不是提供給我一部分數據。

回答

2

我們可以使用advanced-indexing由第三昏暗抓住他們 -

data[np.arange(len(indices_of_interest)),:, indices_of_interest] 

採樣運行 -

In [65]: data = np.arange(60).reshape(5,4,3) 

In [66]: indices_of_interest = [0,2,2,2,0] 

In [67]: data[np.arange(len(indices_of_interest)),:, indices_of_interest] 
Out[67]: 
array([[ 0, 3, 6, 9], 
     [14, 17, 20, 23], 
     [26, 29, 32, 35], 
     [38, 41, 44, 47], 
     [48, 51, 54, 57]])