数据结构-三元组实现稀疏矩阵的储存

三元数组构成

三元数组从左向右储存依次为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])

运行结果为
在这里插入图片描述

发布了18 篇原创文章 · 获赞 0 · 访问量 1272

猜你喜欢

转载自blog.csdn.net/Zengmeng1998/article/details/102956497