給定三元序對
sparse1 = [
[5, 6, 4],
[1, 2, 3],
[2, 1, 6],
[3, 1, 9],
[4, 5, 12]
]
使用一般轉置法,轉置
def sparset(sparse): #稀疏矩陣一般轉置
k=0
sparset=[]
sparset.append([sparse[0][1],sparse[0][0],sparse[0][2]])
while k<=sparset[0][1]:
for i in sparse[1:]:
if i[1]==k:
sparset.append([i[1],i[0],i[2]])
k+=1
return sparset
使用快速矩陣轉置法,轉置
def fastt(sparse): #稀疏矩陣快速轉置
rowsize=[0 for _ in range(int(sparse[0][1]))] #用來統計原本矩陣 column有幾個0幾個1、
rowstart=[0 for _ in range(int(sparse[0][1]))]
sparset=[] #建立轉置後的空陣列
for _ in range(sparse[0][2]):
sparset.append([0,0,0])
for i in sparse[1:]: #1.計算rowsize 統計矩陣column的出現次數
rowsize[i[1]]+=1
rowstart[0]=0 #固定填入0
for i in range(1,int(sparse[0][1])): #2.計算rowstart
rowstart[i]+=rowsize[i-1]+rowstart[i-1]
for i in sparse[1:]: #3.回到原三元序對,逐行檢查,轉置後對照rowstart放入相對應的位置,並且rowstart加1
sparset[rowstart[i[1]]][0]=i[1]
sparset[rowstart[i[1]]][1]=i[0]
sparset[rowstart[i[1]]][2]=i[2]
rowstart[i[1]]+=1
sparset.insert(0,[sparse[0][1],sparse[0][0],sparse[0][2]]) #4.依照三元序對,第一列為total,將第一列放入
return sparset
看結果
martixt1=sparset(sparse1)
print("給定三元序對,使用一般轉置法轉成三元序對:",martixt1) #依照row major排序
matrixt=fastt(sparse1)
print("給定稀疏矩陣的三元序對,使用快速矩陣轉置法轉置:",matrixt)