CSR matrix

park paul·2021년 8월 19일
0

About?

CSR Matrix는 Sparse한 matrix에서 0이 아닌 유효한 데이터로 채워지는 데이터의 값과 좌표 정보만으로 구성하여 메모리 사용량을 최소화하면서도 Sparse한 matrix와 동일한 행렬을 표현할 수 있도록 하는 Data structure

Example

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, 0) = 1

# (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

profile
Innovation is mine

0개의 댓글