本文主要是介绍稀疏矩阵相关,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 使用三元组存储
import numpy as npclass SparseMatrix:def __init__(self, matrix):m = len(matrix)n = len(matrix[0])cnt = 0triplets = []for i in range(m):for j in range(n):if matrix[i][j]:triplets.append((i, j, matrix[i][j]))cnt += 1self.triplets = tripletsself.rows = mself.cols = nself.cnt = cntdef get_item(self, i, j):for cnt in range(self.cnt):if self.triplets[cnt][0] == i and self.triplets[cnt][1] == j:return self.triplets[cnt][2]return 0def add(self, other):res = SparseMatrix(np.array([[0]]))res.rows = self.rowsres.cols = self.colsfor i in range(self.rows):for j in range(self.cols):item = self.get_item(i, j) + other.get_item(i, j)if item:res.triplets.append((i, j, item))res.cnt += 1return resdef mul(self, others):res = SparseMatrix(np.array([[0]]))res.rows = self.rowsres.cols = others.colsfor i in range(self.rows):for j in range(others.cols):s = 0for k in range(self.cols):s += self.get_item(i, k) * others.get_item(k, j)if s:res.triplets.append((i, j, s))res.cnt += 1return resdef transpose(self):res = SparseMatrix(np.array([[0]]))res.rows = self.colsres.cols = self.rowsres.cnt = self.cntfor i in range(self.cols):for j in range(self.cnt):if self.triplets[j][1] == i:res.triplets.append((i, self.triplets[j][0], self.triplets[j][2]))return resdef print(self):mat = np.zeros((self.rows, self.cols))for i in range(self.rows):for j in range(self.cols):mat[i][j] = self.get_item(i, j)print(mat)
这篇关于稀疏矩阵相关的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!