트랜스퍼 블로그 드문드문 행렬 정의

2123 단어 sklearn
CSC CSR의 indptr는 하나의 구간을 표시하고 왼쪽으로 열고 오른쪽으로 닫으며 mXn의 모양에 따라 구분한다. 구체적으로 m인지 n인지 CSR(m줄)인지 CSC(n열)인지 보아야 한다.
희소 행렬 정의

(1)Coordinate (COO)


 
>>> row = np.array([0, 3, 1, 0])
>>> col = np.array([0, 3, 1, 2])
>>> data = np.array([6, 5, 7, 8])
>>> sparse.coo_matrix((data, (row, col)), shape=(4, 4)).toarray()
array([[6, 0, 8, 0],
       [0, 7, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 5]])

이것은 가장 간단한 형식으로 모든 요소는 하나의 삼원조로 표시해야 한다. 각각 (행호, 열호, 수치)이고 위의 그림 오른쪽에 있는 열에 대응한다.이런 방식은 간단하지만 기록서의 정보가 많고 각 삼원조는 스스로 위치를 정할 수 있기 때문에 공간이 가장 좋은 것은 아니다.

(2)Compressed Sparse Column (CSC)


 
>>> indptr = np.array([0, 2, 3, 6])
>>> indices = np.array([0, 2, 2, 0, 1, 2])
>>> data = np.array([1, 2, 3, 4, 5, 6])
>>> sparse.csc_matrix((data, indices, indptr), shape=(3, 3)).toarray()
array([[1, 0, 4],
       [0, 0, 5],
       [2, 3, 6]])

CSC는 열에 따라 희소 행렬을 저장합니다.그 중에서 indptr의 데이터는 행렬에 저장된 데이터가 데이터에 있는 시작과 끝의 인덱스를 대표한다. 예를 들어 여기 indptr는 [0, 2, 3, 6]이다. 즉, 데이터에 표시된 것이다.인덱스[0,2)는 첫 번째 열의 데이터이고, 인덱스[2,3)는 두 번째 열의 데이터이며, 인덱스[3,6)는 세 번째 열의 데이터이다. 인덱스에서 데이터는 대응하는 데이터의 행수를 나타낸다. 예를 들어 인덱스[0,2,0,1,2]는 데이터에서 데이터 1은 0행, 데이터 2는 2행, 데이터 3은 2행, 데이터 4는 0행, 데이터 5는 0행, 데이터는 6행에 있다.그리하여 희소 행렬을 세웠다.

(3)Compressed Sparse Row (CSR)


 
>>> indptr = np.array([0, 2, 3, 6])
>>> indices = np.array([0, 2, 2, 0, 1, 2])
>>> data = np.array([1, 2, 3, 4, 5, 6])
>>> sparse.csr_matrix((data, indices, indptr), shape=(3, 3)).toarray()
array([[1, 0, 2],
       [0, 0, 3],
       [4, 5, 6]])

CSR은 줄별로 희소 행렬을 저장하는데 그 원리는 CSC와 유사하다.indptr의 데이터는 행렬의 모든 줄의 데이터가 데이터에서 시작되고 끝나는 인덱스를 표시하고, indices의 데이터는 데이터에 대응하는 데이터가 행렬에서 행에 있는 열을 표시합니다.인덱스, 인덱스, 데이터 세 개의 그룹이 같은 상황에서 CSC와 CSR을 통해 각각 표시된 행렬은 서로 전환 관계임을 알 수 있다.
저자: 장가추 링크:https://www.jianshu.com/p/9671c568096d  
https://www.jianshu.com/p/9671c568096d
 
scipy의 csrmatrix 상세 설명
https://blog.csdn.net/ChenglinBen/article/details/84426942

좋은 웹페이지 즐겨찾기