2016-06-22 2 views
1

나는 사람과 값을 대체하고 싶습니다 scipy 희소 행렬이 있습니다로 Scipy 스파 스 매트릭스를 채우 이여

from scipy import sparse 
import numpy as np 

data = np.array([[1, 2, 3, 0, 5], [6, 0, 0, 9, 10], [0, 0, 0, 0, 15]]) 

print sparse.coo_matrix(data) 

그 NumPy와는 ones_like() 함수를 가지고 있지만 이건 내 문제가 해결되지 않은 참조 .

(0, 0)  1 
(0, 1)  1 
(0, 2)  1 
(0, 4)  1 
(1, 0)  1 
(1, 3)  1 
(1, 4)  1 
(2, 4)  1 

답변

2

이 작업을 수행하는 가장 쉬운 방법은 직접 희소 행렬 표현을 조작하는 것입니다 같은

출력이 보일 것입니다. 그렇게하는 방법은 당신이 선택한 표현에 달려 있습니다. COO 형식의 경우

data.data[:] = 1 

COO 형식에는 중복 된 항목이 허용되는 이상한 기능이 있습니다. COO 행렬에 (1, 1) 위치에 두 개의 항목이있는 경우 위의 코드는 해당 항목을 모두 1으로 설정하여 그 행렬을 다른 형식으로 변환하면 2의 단일 항목이됩니다. 대신 1의 단일 항목을 원하는 경우 원래`coo`가 조밀 한 배열에서 내장되어있는 경우, 당신은하지 않습니다 (내가 좋아하는 일) 'entry` 기능을 복제하는 것이,

data.sum_duplicates() 
data.data[:] = 1 
+0

최초의 중복을 정상화 할 수 있습니다 이슈. 'raw'데이터, row, col 배열로부터'coo'를 빌드 할 때만 발생합니다. – hpaulj