""" 稀疏矩陣動態增加行
原理:創建一個1行n列的新矩陣與原矩陣合併-->tocsr() 成爲新的稀疏矩陣.動態增加的目的達成
"""
import sys
import scipy.sparse as ss
import numpy as np
a = ss.dok_matrix((0, 100), dtype=np.int16)
print('a1-->', a.shape, type(a))
for i in range(3):
b = ss.dok_matrix((1, 100), dtype=np.int16)
b[0, 1] = i+1
a = ss.vstack([a, b]).tocsr() # 轉csr()是方便元素計算(加、減)
print('a{}-->'.format(i+2), a.shape, sys.getsizeof(a))
print(a.todense(), sys.getsizeof(a))
a[1, 2] += 20
print(a.todense(), type(a), sys.getsizeof(a))
# 統計
tf = int(np.sum(a[1])) # 統計一行的和
print('tf', tf)
nonz = np.nonzero(a[1]) # 取出一行的非零元素
print(nonz)
nonsum = len(nonz[0]) + 1 # 非零元素個數+1
print(nonsum)
參考:
https://blog.csdn.net/shevchenkoNIIT/article/details/77747811
https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.coo_matrix.html
https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html
https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.dok_matrix.html