三元数组构成
三元数组从左向右储存依次为row(行号)、clumn(列号)、元素值(value)储存稀疏矩阵的非0元素。
from scipy import sparse
#help(sparse)
#定义节点类
class TripleNode(object):
def __init__(self,row=0,column=0,value=0):
self.row=row
self.clumn=column
self.value=value
#定义行号,列号,元素值
稀疏矩阵的储存
稀疏矩阵指的是多数元素为0的矩阵(95%左右)
所以如果用储存它,是有些浪费空间的,因此,提出三元数组的储存形式对稀疏矩阵的非0元素进行储存,可以大大的节省储存空间。(降维矩阵降维成列表)
class SparseMatrix(object):
def __init__(self,maxSize):
self.maxSize=maxSize
self.data=[None]*maxSize
for i in range(self.maxSize):
self.data[i]=TripleNode()
self.row=0
self.column=0
self.value=0
将元数组链表转换成矩阵
借助python中scipy库中的sparse中的coo-martix对链表进行转换。(具体的使用方方法笔者参照python稀疏矩阵的表示与运用)其存储稀疏矩阵的原理与上述三元数组类似,故借助这个包进行下面的程序的实现。
row = [0, 1, 2, 2]
col = [0, 1, 2, 3]
data = [1, 2, 3, 0]
A = sparse.coo_matrix((data, (row, col)), shape=(4, 4))
B = sparse.coo_matrix((row,(data,col)),shape=(4,4))
print(A.toarray())
print(B.toarray())
print(A.toarray()+B.toarray())
c=B.toarray()
print(c.T)
#print(coo_mat.toarray[1][2])
运行结果为