matlab稀疏矩阵的转换和存取

       在进行大型矩阵的计算处理时,如果该矩阵是一个稀疏矩阵,那么将它整个写入内存或者保存下来都是极其浪费存储空间的。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

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tizzy477

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值