2016-12-15 40 views
4

我有3D numpy的陣列numpy的子矩陣3D:使用單個索引項

K = (np.arange(36)).reshape((4,3,3))+1 
[[[ 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]]] 

其中以K每個項目是一個矩陣。 現在,我想用一定的指標向量

我知道這是可以以這種方式來獲取所有的2D子陣:

idx = np.s_[:,:2,:2] 
K_sub = K[idx] 
[[[ 1 2] 
[ 4 5]] 

[[10 11] 
[13 14]] 

[[19 20] 
[22 23]] 

[[28 29] 
[31 32]]] 

的問題是,我想用一個任意索引數組,而不是切片以選擇行和列。

此外,我想用一個對象來獲取子矩陣列表,像:

K_sub = [magic_indexing] 

,而不是:

K_sub = np.array([k_[train][:,train] for k_ in K]) 

存在簡單的方法來做到這一點?

回答

0

不知道,如果它只是夠你,但一個方法是用np.ix_因此使用advanced-indexing,像這樣 -

K[np.ix_(np.arange(K.shape[0]), train, train)] 
+0

它完美的作品,TY! –