2012-12-01 2 views
4

numpy 2 차원 배열 A과 행 번호 row_set의 목록이 있습니다. row_set = [0, 2, 5] 다음에 B = [A_row[0], A_row[2], A_row[5]]과 같은 새로운 배열 B을 얻으려면 어떻게해야합니까?원하는 배열의 조각 번호 배열

나는 이런 식의 생각 :

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]])