2013-11-21 2 views
4

그물을 조사하여 Scipy sparse matrices에 대한 안내서를 찾았습니다. 실패했습니다. 아무도 그것의 소스를 공유하지만 질문을하게되면 행복 할 것입니다 :튜플의 희소 배열

나는 튜플 배열을 가지고 있습니다. 튜플의 배열을 희소 행렬로 바꾸고 싶습니다. 여기서는 튜플이 주 대각선에 표시되고 대각선이 바로 옆에 표시됩니다. 그것을하는 공상 (효율적인) 방법은 무엇입니까?

import numpy as np 
A=np.asarray([[1,2],[3,4],[5,6],[7,8]]) 
B=np.zeros((A.shape[0],A.shape[0]+1)) 
for i in range(A.shape[0]): 
    B[i,i]=A[i,0] 
    B[i,i+1]=A[i,1] 
print B 

출력 존재 :

[[ 1. 2. 0. 0. 0.] 
[ 0. 3. 4. 0. 0.] 
[ 0. 0. 5. 6. 0.] 
[ 0. 0. 0. 7. 8.]] 
+0

아마도 이것은 내가 생각하기에는 가장 실망스러운 방법 일 것입니다. – Cupitor

+0

scipy 스파 스 패키지에 대한 주요 정보 출처는 http://docs.scipy.org/doc/scipy/reference/sparse.html입니다. 그러나 이것은 세련된 사용자 또는 초보자 가이드가 아닙니다. 이 패키지는 아직 개발 중입니다. Matlab의 드문 드문 matricies 더 나은 문서가있을 수 있습니다. – hpaulj

답변

4

를 제공하는 경우 ast : CSR 매트릭스로 :

>>> A = np.asarray([[1,2],[3,4],[5,6],[7,8]]) 
>>> rows = len(A) 
>>> cols = rows + 1 
>>> data = A.flatten() # we want a copy 
>>> indptr = np.arange(0, len(data)+1, 2) # 2 non-zero entries per row 
>>> indices = np.repeat(np.arange(cols), [1] + [2] * (cols-2) + [1]) 
>>> import scipy.sparse as sps 
>>> a_sps = sps.csr_matrix((data, indices, indptr), shape=(rows, cols)) 
>>> a_sps.A 
array([[1, 2, 0, 0, 0], 
     [0, 3, 4, 0, 0], 
     [0, 0, 5, 6, 0], 
     [0, 0, 0, 7, 8]]) 
+0

고마워요. 당신이 알고 있다면이 희소 행렬에 대한 정보를 나에게 줄 수 있겠습니까? – Cupitor

+2

스파 스 행렬 위키피디아 페이지 (http://en.wikipedia.org/wiki/Sparse_matrix)는 세 배열 ('data','indices' 및'indptr')이 무엇인지에 대한 좋은 출발점입니다. 그것들을 알고 있으면, (적어도 현재는) sipy.sparse API를 초월한 것들을 매우 빠르게 수행 할 수있다. – Jaime

4

시도는 diags from scipy

import numpy as np 
import scipy.sparse 

A = np.asarray([[1,2],[3,4],[5,6],[7,8]]) 
B = scipy.sparse.diags([A[:,0], A[:,1]], [0, 1], [4, 5]) 

I print B.todense(), 그것은 F 당신은 정말 사람들을 구축 할 수 있습니다 나에게

[[ 1. 2. 0. 0. 0.] 
[ 0. 3. 4. 0. 0.] 
[ 0. 0. 5. 6. 0.] 
[ 0. 0. 0. 7. 8.]] 
+0

더 컴팩트하게 :'sparse.diags (A.T, [0,1], (4,5)). A' – hpaulj