2015-02-05 2 views
0

나는 numpy 배열 목록을 가지고 있습니다. 각 배열은 스파 스 이진 행렬에 1이되도록 필요한 열의 값을 보유합니다. 목록에 numpy 배열이 나타나는 순서는 해당 numpy 배열의 모든 값에 대한 행 값입니다. 이 작업을 수행하기 위해 scipy.sparse.csr_matrix를 사용하려고합니다. 그래서 난 열 인덱스에 대한 하나와 행 인덱스에 대한 다른 두 개의 질의 배열이 필요합니다.Numpy : 희소 행렬에 대한 색인 만들기

a = np.array([1, 2, 3, 4, 5, 6]) 
b = np.array([10, 11, 12]) 
c = np.array([60, 100]) 
d = [a, b, c] 

column = np.array([1, 2, 3, 4, 5, 6, 10, 11, 12, 60, 100]) 
row = np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2]) 

답변

3

column 단지 평평한 D의 벡터, 그래서 시도한다 :

column = np.hstack(d)

row를 들어,이 작업을해야합니다

row = np.hstack([np.ones(len(arr))*i for i, arr in enumerate(d)])

여기에 내가 필요의 예입니다

기본적으로 d 단계를 거치며 d의 각 항목 길이 길이의 배열을 만들어 곱하십시오 s 인덱스를 d로하고 벡터를 모두 벡터로 전개합니다.

+0

'np.concatenate'는 1d 배열과 동일합니다. – hpaulj

0

상기 row 배열을 생성하는 다른 방법의 몇리스트 복제이 작은 예 후자

row = np.concatenate([np.ones_like(x)*i for i,x in enumerate(d)]) 

row = np.concatenate([[i]*len(x) for i,x in enumerate(d)]) 

는 상당히 빠르다. 그러나 대형 어레이에서는 타이밍이 다른 방향으로 갈 수 있습니다.

이와 같은 1 차원 어레이의 경우 hstack은 기본값 concatenate과 같습니다.

col = np.concatenate(d) 

전체 sparse 호출

sparse.csr_matrix((np.ones_like(col),(row, col)),shape=(N,M)) 

coo, csrcsc 모든 입력이 스타일을 수용 (모양 (N,M)에 대한) 다음이다. coo은 주어진 속성과 정확히 일치하는 속성을 할당한다는 점이 다릅니다 (빠름). 다른 사람들은 정렬 및 합계 (행, 열 쌍을 허용) 및 정리 작업을 수행합니다.

관련 문제