稀疏矩陣的儲存

2021-09-27 01:54:28 字數 2745 閱讀 3572

class unit:

def __init__(self,val=none,i=none,j=none): # 乙個三元組

self.val = val

self.i = i

self.j = j

class xishumatrix:

def __init__(self):

self.matrix =

def destroy(self):

self.__init__()

def create(self,i=none,j=none,v=none): # 插入三元組

if v != 0:

u = unit(v,i,j)

def get_maxi(self): # 獲取矩陣的最大i(其實就是矩陣的m值)

maxi = -1

for v in self.matrix:

if maxi < v.i:

maxi = v.i

return maxi

def get_maxj(self): # 獲取矩陣的最大j(其實就是矩陣的n值)

maxj = -1

for v in self.matrix:

if maxj < v.j:

maxj = v.j

return maxj

def print(self): # 以人比較好看的方式列印矩陣

m = self.get_maxi()

n = self.get_maxj()

matrix =

for i in range(m+1):

tmp =

for j in range(n+1):

for v in self.matrix:

matrix[v.i][v.j] = v.val

for i in range(m+1):

print(matrix[i])

def copy_matrix(self): # 複製矩陣

t = xishumatrix()

t.matrix = self.matrix

return t

def add_matrix(self,t): # 相加

for i in t.matrix:

for j,v in enumerate(self.matrix):

if i.i == v.i and i.j == v.j:

self.matrix[j].val = i.val + v.val

break

else:

def sub_matrix(self,t): # 相減

for i in t.matrix:

for j,v in enumerate(self.matrix):

if i.i == v.i and i.j == v.j:

self.matrix[j].val = i.val - v.val

break

else:

i.val = -i.val

def mults_matrix(self,t): # 相乘

tmp =

while self.matrix:

cur_i = self.matrix[0].i

cur_is = [self.matrix[0]] # 儲存某行

for i in self.matrix[1:]:

if i.i == cur_i:

cur_j = t.matrix[0].j

cur_js = [t.matrix[0]] # 儲存某列

for i in t.matrix[1:]:

if i.j == cur_j:

sums = 0

for i in cur_is: # 進行相乘

for j in cur_js:

if i.j == j.i: # 如果p相等

sums += i.val * j.val

break

tmp_unit = unit(sums,cur_i,cur_j)

for i in cur_is:

self.matrix.remove(i)

for j in cur_js:

t.matrix.remove(j)

self.matrix = tmp

def reverse(self): # 轉置

for i,v in enumerate(self.matrix):

self.matrix[i].i,self.matrix[i].j = v.j,v.i

x = xishumatrix()

x.create(1,1,1)

x.create(2,2,2)

x.create(3,3,3)

x.print()

t = xishumatrix()

t.create(1,1,1)

t.create(2,2,2)

t.create(3,3,4)

t.print()

# x.sub_matrix(t)

# x.print()

x.mults_matrix(t)

x.print()

t = xishumatrix()

t.create(1,2,3)

t.create(1,3,2)

t.create(3,2,1)

t.print()

t.reverse()

t.print()

稀疏矩陣儲存格式

當運算資料數量很大且稀疏的時候,使用稀疏的資料儲存格式可以節省大量的儲存空間且加快計算速度。本文介紹三種比較常見的稀疏矩陣表示方式 coo coordinate format座標表示 csr compressed sparse row行壓縮 csc compressed sparse column列...

稀疏矩陣儲存方式

在資料預處理中,我們需要採集前的資料是非常龐大的。不妨將資料集d視作乙個矩陣,每一行對應乙個樣本,每一列對應某個特徵。而在現實生活中,例如文件分類任務,以每乙個字詞作為乙個特徵,特徵屬性多大成千上萬,即數千數萬列,而相當一部分特徵對於所考慮的問題具有 稀疏性 也就是矩陣中許多列與當前學習任務無關。這...

稀疏矩陣的壓縮儲存

include include using namespace std templateclass sparsematrix sparsematrix 訪問稀疏矩陣中row行col中的元素 t access int row,int col it return invalid for size t i...