在进行大型矩阵的计算处理时,如果该矩阵是一个稀疏矩阵,那么将它整个写入内存或者保存下来都是极其浪费存储空间的。matlab里面有sparse函数可以将矩阵转为稀疏形式,但sparse类型的矩阵无法直接存取,所以只能自己将稀疏矩阵中的元素提出来,再按照正常的矩阵存储方法进行写出。
提取稀疏矩阵中非零值及其坐标并保存:
通过将稀疏矩阵中非零值所处的位置坐标(i,j)和其值v保存成3个nx1维数组,再将它们合并为一个nx3维的数组,最后使用writematrix将稀疏矩阵存储下来
n = length(find(matrix>0)); %计算矩阵matrix中非0元素个数
%需要三个数组来存储稀疏矩阵信息(i,j,v)
x = zeros(n,1); %初始化坐标存储矩阵
y = zeros(n,1);
v = zeros(n,1); %初始化元素值存储矩阵
[x,y,v] = find(matrix); %使用find函数找到非0元素及其坐标
matirx_sparse = [x,y,v]; %将三个数组合并为一个数组
writematrix(matrix_sparse,['matrix_sparse.txt'],'delimiter','space'); %使用writematrix函数写出稀疏矩阵
将稀疏矩阵转为完整矩阵:
将稀疏矩阵转换回完整矩阵的过程也就是将非零值写入对应的坐标位置,通过读取nx3维数组的三列也就获得了(i,j)和v
matrix_full = zeros(n,n); %初始化完整矩阵,包含所有元素
for row = 1:1:length(matrix_sparse) %稀疏矩阵的坐标将值写入完整矩阵
matrix_full(matrix_sparse(row,1),matrix_sparse(row,2)) = matrix_sparse(row,3);
%matrix_sparse(row,1)=坐标x,matrix_sparse(row,2)=坐标y,matrix_sparse(row,3)=值v
end