2.5 稀疏矩阵

写在前面:作者本人是纯纯的菜鸟,学习的内容来自于 中国大学MOOC 中南大学 《科学计算与MATLAB语言》,欢迎各位大佬或新手在这里和平讨论,如果我有错误请各位不吝赐教,提前感谢各位捧场!


什么是稀疏矩阵?

一个零元素个数远远多于非零元素个数的矩阵。对于这样的矩阵,若将零元素也存储起来则会浪费计算机储存空间,因此对这样的矩阵还专门开发了稀疏存储方式。

一、矩阵的存储方式

1.完全存储方式(直到这篇文章以前我举的所有例子基本都是使用了完全存储方式)

2.稀疏存储方式:只存储非零元素对应的行列号以及这个数字的值。

注:采用稀疏存储方式时矩阵储存顺序并没有改变,仍然按列排列。

二、建立稀疏存储方式

方法一:完全存储方式和稀疏存储方式的转化

a.完全->稀疏:A=sparse(S) 将矩阵S转化为稀疏存储方式储存于A中。

b.稀疏->完全:S=full(A) 将矩阵A转换为完全存储方式储存于S中。

 

 但如果一个矩阵本身非常大,无法通过线完全存储再进行转化的方式稀疏存储,则又要找到别的办法了。

方法二:直接建立稀疏存储方式

情况一:纯纯的稀疏矩阵

a.使用sparse()函数,此时需要使用其他两种调用格式:

sparse(m,n)
%建立m行n列全零矩阵,经过我的实验,与使用zeros函数有一丝丝区别,见下图
sparse(u,v,S)
%u(i),v(i)分别是行列下标
%S(i)是非零元素的值

zeros函数和sparse(m,n)函数产生零矩阵的区别

 在进行A==B的运行,会生成一个全1矩阵,说明这两个矩阵是完全一样的,也就是说这个稀疏矩阵稀疏的只想写汉字表示这个5*6矩阵全是0了。。

b.使用spconvert()函数

B=spconvert(A)
%A是一个m*3或m*4矩阵,m是非零元素个数
%A(i,1)表示该元素的行号
%A(i,2)表示该元素的列号
%A(i,3)表示该元素的实部
%A(i,4)表示该元素的虚部(若不写则表示没有虚部)

 情况二:带状系数矩阵

带状稀疏矩阵:所有非零元素都在对角线上(别忘记矩阵对角线有很多,对角线还有命名规定哦)

存储方式:

[B,d]=spdiags(A)
%从带状稀疏矩阵中提取全部非零对角线元素赋给矩阵B,并将对应的对角线序号储存至向量d
A=spdiags(B,d,m,n)
%m,n表示A矩阵的行列数

 如图,带状稀疏矩阵存储方式是(个人理解):B的行数为最长对角线的元素个数(这个接下来我做了实验证明),主对角线以下的对角线的元素存储进入B的对应列会先补0再填写非零元素;相反的,在主对角线以上的元素储存时会先写非零元素再补0.

 如图,对于这个A矩阵,主对角线元素全为0,储存时B矩阵仍保持3行。

情况三:单位矩阵的系数存储

speye(m,n)
%稀疏存储一个m行n列的单位矩阵
%当然,若产生单位方阵可以省略n

 


 以上就是今天分享的全部内容了,再次感谢各位耐心看到这里!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值