给定两个稀疏矩阵,并用三元序对表示:
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)