y
가 희소 행렬 인 경우
In [59]: y[mask][:, mask]
Out[59]:
<103x103 sparse matrix of type '<type 'numpy.float64'>'
with 51 stored elements in Compressed Sparse Row format>
:
In [57]: mask.dtype
Out[57]: dtype('bool')
In [58]: mask.shape
Out[58]: (200,)
그럼 y[mask][:, mask]
원하는 행렬을 산출 :
In [56]: y
Out[56]:
<200x200 sparse matrix of type '<type 'numpy.float64'>'
with 197 stored elements in Compressed Sparse Row format>
및 mask
은 1 차원 부울 배열
NumPy와는 당신이 원하는 인덱스를 구성하기 위해 여기에 사용할 수있는 기능 np.ix_
이 있지만 상당히 느립니다 : 모두 y[mask][:, mask]
하고,의 뷰가 아닌 새로운 스파 스 행렬을 반환 y[np.ix_(mask, mask)]
것을
In [64]: y[np.ix_(mask, mask)]
Out[64]:
<103x103 sparse matrix of type '<type 'numpy.float64'>'
with 51 stored elements in Compressed Sparse Row format>
In [65]: %timeit y[np.ix_(mask, mask)]
10 loops, best of 3: 59.8 ms per loop
In [66]: %timeit y[mask][:, mask]
1000 loops, best of 3: 494 µs per loop
주 원래 스파 스 매트릭스. 임의의 행과 열을 선택하기 때문에보기를 반환 할 방법이 없습니다. y[np.ix_(mask, mask)]
단지 하나의 인덱스를 사용하기 때문에
그러나 그것에 배정 y.__setitem__
따라서 (는 y
의 방법) y
영향을 호출 이에
y[np.ix_(mask, mask)] = other
, y[mask]
가 y
무관 한 행렬이기 때문에, 과제물
y[mask][:, mask] = other
은 __setitem__
이 독립 행렬의 방법이므로 y
에 영향을 미치지 않습니다.
고마워요! 나는 그것을 시도 할 것이다 (나의 자료를 편리하게 가지지 마라). N ~ 100,000의 계수는 약 30,000,000이고 M은 ~ 60,000입니다. –
>>> G [마스크] :, 마스크] 트레이스 백 (최근 통화 마지막) 파일 ""라인 1 파일 "/usr/local/lib/python2.7/dist-packages /scipy/sparse/csr.py ", 247 줄, __getitem__ return self [행 :] * P 파일"/usr/local/lib/python2.7/dist-packages/scipy/sparse/base.py ", 263 줄, __mul__ return self._mul_sparse_matrix (기타) 파일"/usr/local/lib/python2.7/dist-packages/scipy/sparse/compressed.py ", 줄 300, _mul_sparse_matrix 인덱스 = np.empty (nnz, dtype = np.intc) ValueError : 음수 차원을 사용할 수 없습니다. –
"음수 값을 사용할 수 없습니다."라는 메시지 [결과 매트릭스가 너무 크다] (http://stackoverflow.com/a/12120778/190597).이 문제는 새로운 버전의 scipy에서 수정 된 것으로 보입니다. – unutbu