任务描述
在此次任务中,需要完成稀疏矩阵的压缩与解压。稀疏矩阵是一类0元素占比很大的一类矩阵,如果按照正常的矩阵来存储,将会占用很大的存储空间,会导致计算机的资源浪费。
程序实现(程序语言:python)
稀疏矩阵的压缩
def Sparse_Matrix_Compression(mat):
out = []
mat = np.array(mat)
out.append((mat.shape[0], mat.shape[1], np.sum(mat != 0)))
for i in range(mat.shape[0]):
for j in range(mat.shape[1]):
if mat[i, j] != 0:
out.append((i, j, mat[i, j]))
return out
稀疏矩阵的解压
def Sparse_Matrix_Decompression(list):
out = np.zeros((list[0][0], list[0][1]))
list = np.array(list)
for i in range(list[0][2]):
out[list[i + 1][0], list[i + 1][1]] = list[i + 1][2]
print(out)
return out
测试
mat = [[0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 1, 0, 0],
[0, 1, 0, 0, 1, 0, 0],
[0, 1, 0, 1, 0, 0, 0],
[0, 1, 0, 1, 0, 0, 0]
]
out = Sparse_Matrix_Compression(mat)
Sparse_Matrix_Decompression(out)
总代码
import numpy as np
def Sparse_Matrix_Compression(mat):
out = []
mat = np.array(mat)
out.append((mat.shape[0], mat.shape[1], np.sum(mat != 0)))
for i in range(mat.shape[0]):
for j in range(mat.shape[1]):
if mat[i, j] != 0:
out.append((i, j, mat[i, j]))
return out
def Sparse_Matrix_Decompression(list):
out = np.zeros((list[0][0], list[0][1]))
list = np.array(list)
for i in range(list[0][2]):
out[list[i + 1][0], list[i + 1][1]] = list[i + 1][2]
print(out)
return out
mat = [[0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 1, 0, 0],
[0, 1, 0, 0, 1, 0, 0],
[0, 1, 0, 1, 0, 0, 0],
[0, 1, 0, 1, 0, 0, 0]
]
out = Sparse_Matrix_Compression(mat)
Sparse_Matrix_Decompression(out)