iT邦幫忙

0

[Python][資料結構]稀疏矩陣(二)

  • 分享至 

  • xImage
  •  

給定三元序對

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)

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言