2012-12-01 21 views
4

我有一個numpy二維數組A,以及行號列表row_set。我如何獲得新陣列Brow_set = [0, 2, 5],然後B = [A_row[0], A_row[2], A_row[5]]切片numpy數組與想要的行列表

我認爲是這樣的:

def slice_matrix(A, row_set): 
    slice = array([row for row in A if row_num in row_set]) 

,但我沒有任何想法,我怎樣才能得到一個ROW_NUM。

回答

6

使用take()

In [87]: m = np.random.random((6, 2)) 

In [88]: m 
Out[88]: 
array([[ 0.6641412 , 0.31556053], 
     [ 0.11480163, 0.00143887], 
     [ 0.4677745 , 0.43055324], 
     [ 0.49749099, 0.15678506], 
     [ 0.48024596, 0.65701218], 
     [ 0.48952677, 0.97089177]]) 

In [89]: m.take([0, 2, 5], axis=0) 
Out[89]: 
array([[ 0.6641412 , 0.31556053], 
     [ 0.4677745 , 0.43055324], 
     [ 0.48952677, 0.97089177]]) 
5

您可以通過列表或數組作爲索引,以任何NP陣列。

>>> r = np.random.randint(0,10,(5,5)) 
>>> r 
array([[3, 8, 9, 8, 4], 
     [4, 1, 5, 9, 1], 
     [3, 6, 8, 8, 0], 
     [5, 1, 7, 6, 1], 
     [6, 1, 7, 7, 7]]) 
>>> idx = [0,3,1] 
>>> r[idx] 
array([[3, 8, 9, 8, 4], 
     [5, 1, 7, 6, 1], 
     [4, 1, 5, 9, 1]])