MATLAB之稀疏矩阵

1、稀疏矩阵定义及存储
稀疏矩阵即含0较多的矩阵。
MATLAB为了节省内存空间,对与实数稀疏矩阵采用3个内部数组来保存非零元素及其对应的位置。
对与复数稀疏矩阵,采用第4个内部数组保存非0复数的虚部。
在这里插入图片描述
说明:M_full和M_sparse其实是同一个矩阵,但是内存却相差了一万倍,可怕。

2、稀疏矩阵的创建
MATLAB不会自己创建稀疏矩阵。一般由用户根据商来确定是否要采用稀疏矩阵。
商也叫密度:非零个数比矩阵总体元素数。密度越小,用稀疏矩阵越有利。
spares()将矩阵变成稀疏矩阵,full()则将稀疏矩阵变成一般矩阵。
在这里插入图片描述
2.1 直接创建稀疏矩阵
使用spares(i,j,s,m,n)函数,i,j分别是行列向量,s为非零值向量,m,n为行列数。在这里插入图片描述
2.2 对角元素中创建稀疏矩阵
函数spdiags(B,d,m,n),B矩阵中的数作为值,d向量作为指定m*n矩阵的对角线
如: b=[1 2 3;4 5 6;7 8 9;10 11 12]
spdiags(b,[-3 0 2],7,4)
在这里插入图片描述
2.3 从外部文件导入稀疏矩阵
1.用文本创建一个三列或四列(复数)的.dat文件
2.将该文件放在当前MATLAB工作目录下
3.load name.dat %将文件导入
4.使用函数spconvert(name),将其转换为稀疏矩阵。

3 稀疏矩阵运算原则
在这里插入图片描述

4 稀疏矩阵的交换与重新排序
4.1、稀疏矩阵的行交换与列交换有以下两种方法
1、有交换矩阵P,对稀疏矩阵S进行行行交换,可以表示为PS,进行列交换可以表示为PS’
2、有一个交换矢量p,p为一个矢量(1到n的自然数的排列,如p=[1 2 4 3]),对稀疏矩阵的行行交换可以表示为S(p,:),列交换可以表示为S(:,p)。
注意:p=[1 3 2 4],所以是2 3 行进行交换
也可以对矩阵S的某一行进行列交换(S(n,p)),或对某一列进行行行交换(S(p,n))。注意返回的是向量。
注意返回的是向量
对稀疏矩阵的行行交换或列列交换,返回的仍然是稀疏矩阵。交换方法是与一般矩阵相同。
4.2 对稀疏矩阵的列进行重新排序
好处:有时可以使矩形的分解速度更快。
方法:最简单的方法是根据矩阵列中非零元素的个数对列进行排序。使用方法colperm,该方法接收一个矩阵,计算矩阵每一列的非零元素的个数,按非零元素个数从小到大进行排列以后,返回各列的顺序,返回的就是交换矢量。
如:S矩阵,每一列的非零元素的个数分别为 2 2 3 2则返回p=[1 2 4 3]
再:B=S(:,p)%对矩阵S按非零元的个数升序排列。
在这里插入图片描述

5 稀疏矩阵视图
MATLAB提供了函数spy,用于观察稀疏矩阵非零元素的分布视图。

  • 9
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值