CSR Matrix는 Sparse한 matrix에서 0이 아닌 유효한 데이터로 채워지는 데이터의 값과 좌표 정보만으로 구성하여 메모리 사용량을 최소화하면서도 Sparse한 matrix와 동일한 행렬을 표현할 수 있도록 하는 Data structure
Row 순서대로 데이터를 저장한다.
CSR matrix에는 indices, indptr, data가 있다.
data는 0이 아닌 요소의 값이다.
print(csr.data) # [1 2 3 4 5 6]
indices는 data의 값에 해당하는 column index이다.
print(csr.indices) # [0 4 1 3 0 3]
indptr은 row 별로 data의 begin index와 end index가 저장되어 있다.
예를 들어 0번째 row의 data는 data[0:2]이다.
print(csr.indptr) # [0 2 4 4 6]
그렇기 때문에 indptr의 길이는 row개수보다 하나 더 많음.
#num of rows +1
len(csr.indptr) #5
indptr과 indices를 이용하면 row마다 연산이 가능하다.
for i, (b, e) in enumerate(zip(csr.indptr, csr.indptr[1:])):
for idx in range(b, e):
j = csr.indices[idx]
d = csr.data[idx]
print('({}, {}) = {}'.format(i, j, d))
# (0, 4) = 2
# (1, 1) = 3
# (1, 3) = 4
# (3, 0) = 5
# (3, 3) = 6
sprase.nonzero()를 실행하면 rows, cols가 return된다.
rows, cols = csr.nonzere()
Ref)https://lovit.github.io/nlp/machine%20learning/2018/04/09/sparse_mtarix_handling/#csr-matrix