2014-11-26 9 views
4

첫 번째 행이 카테고리이고 두 번째 행이 하위 카테고리이고 세 번째 행이 내가 집광하고 싶은 값인 배열이 있습니다.NumPy 배열의 값을 행 인덱스로 변환

나는 배열 B로 배열

[[ 4 4 19 19 20 21 25 26 26 27 27 29] # category 
[ 1 2 1 2 1 2 1 1 2 1 2 2] # subcategory 
[ 1 1 3 3 1 2 1 1 1 2 2 2]] # count 

를 재 배열하기 위해 노력하고있어

[[ 4 19 20 21 25 26 27 29] # category 
[ 1 3 1 0 1 1 2 0] # subcategory 1 count 
[ 1 3 0 2 0 1 2 2]] # subcategory 2 count 

I 해요까지로이

categories, subcategories = np.unique(A[0], return_counts=True) 
B = np.zeros((np.amax(subcategories) + 1, A[0].size)) 
B[0] = categories 

하지만 확실히 채우는 방법 휴식. 어떤 아이디어?

답변

1

이 트릭을 수행해야합니다

cat_index = np.searchsorted(categories, A[0]) 
B[A[1], cat_index] = A[2] 
1

이 입력 정렬되지 않은 경우에도 작동합니다 :

import numpy as np 

A = np.array(
    [[ 4, 4,19,19,20,21,25,26,26,27,27,29], # category 
    [ 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2], # subcategory 
    [ 1, 1, 3, 3, 1, 2, 1, 1, 1, 2, 2, 2]]) # count 

values, inverse = np.unique(A[0], return_inverse=True) 

B = np.zeros((3, len(values))) 
B[0] = values 
B[1,inverse[A[1] == 1]] = A[2,A[1] == 1] 
B[2,inverse[A[1] == 2]] = A[2,A[1] == 2] 

제공 :

[[ 4 19 20 21 25 26 27 29] 
[ 1 3 1 0 1 1 2 0] 
[ 1 3 0 2 0 1 2 2]] 
관련 문제