[Pyhton][资料结构]稀疏矩阵(三)

给定两个稀疏矩阵,并用三元序对表示:

sparse1 = [             [5, 6, 4],              [1, 2, 3],              [2, 1, 6],             [3, 1, 9],              [4, 5, 12]          ]sparse2=[        [5,6,5],        [1,2,7],        [2,5,2],        [3,4,4],        [4,2,2],        [4,5,5]        ]

相加、相乘

def add(sparse1,sparse2): #两稀疏矩阵相加    sparse3=[]    i,j=1,1    sparse3=[[sparse1[0][0],sparse1[0][1],0]]    if sparse1[0][0] != sparse2[0][0] or sparse1[0][1] !=sparse2[0][1]:        print("两矩阵大小不同,无法相加")            else:        while i<=sparse1[0][2] and j<=sparse2[0][2]:            if sparse1[i][0]==sparse2[j][0]:                if sparse1[i][1]==sparse2[j][1]:                    sparse3.append([sparse1[i][0],sparse2[j][1],sparse1[i][2]+sparse2[j][2]])                    i+=1                    j+=1                    sparse3[0][2]+=1                else:                    if  sparse1[i][1] < sparse2[j][1]:                        sparse3.append([sparse1[i][0],sparse1[i][1],sparse1[i][2]])                        i+=1                        sparse3[0][2]+=1                    else:                        sparse3.append([sparse2[j][0],sparse2[j][1],sparse2[j][2]])                        j+=1                        sparse3[0][2]+=1            else:                if  sparse1[i][0] < sparse1[j][0]:                    sparse3.append([sparse1[i][0],sparse1[i][1],sparse1[i][2]])                    i+=1                    sparse3[0][2]+=1                else:                    sparse3.append([sparse2[j][0],sparse2[j][1],sparse2[j][2]])                    j+=1                    sparse3[0][2]+=1        return sparse3def multi(sparse1,sparse3) : #两稀疏矩阵相乘    s1row=sparse1[0][0]    s1col=sparse1[0][1]    s3row=sparse3[0][0]    s3col=sparse3[0][1]    sparse4=[]     c=0   #计算总共非零项    if s1col!=s3row:        print("大小不同,无法相乘")    else:        sparse4.append([s1row,s3col,0]) #将总共的行列数append入新的matrix        for i in sparse1[1:]: #遍历sparse1的非0元素            total=0            for j in sparse3[1:]: #遍历sparse3的非0元素                if i[1]==j[0]: #大小相同就相乘                    k=j[1]                    total+=i[2]*j[2]            if total !=0:                sparse4.append([i[0],k,total])                    c+=1           sparse4[0][2]=c        return sparse4     

看结果

addmatrix=add(sparse1,sparse2)print("给定两个三元序对,相加:",addmatrix)multimatrix=multi(sparse1,sparse3)print("给定两个三元序对,相乘:",multimatrix)

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章