2.5 稀疏矩阵

2.5.1 矩阵的存储方式

  • 完全存储方式
  • 稀疏存储方式
    • 稀疏存储方式只存储矩阵的非零元素的值及其位置,即行号和列号。

注意:采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也是按列的顺序进行存储。

举例:

举例

2.5.2 稀疏存储方式的产生

(1)完全存储方式与稀疏存储方式之间的转化

  • A = sparse(S):将矩阵 S 转化为稀疏存储方式的矩阵 A
  • S = full(A):将矩阵 A 转化为完全存储方式的矩阵 S
>> A = sparse(eye(5))

A =

   (1,1)        1   (2,2)        1   (3,3)        1   (4,4)        1   (5,5)        1

>> B = full(A)

B =

     1     0     0     0     0     0     1     0     0     0     0     0     1     0     0     0     0     0     1     0     0     0     0     0     1

>> whos  Name      Size            Bytes  Class     Attributes

  A         5x5               128  double    sparse      B         5x5               200  double           

(2)直接建立稀疏存储矩阵

sparse 函数的其他调用格式:

  • sparse(m,n):生成一个 m✖️n 的所有元素都是零的稀疏矩阵
  • sparse(u,v,S):其中 u、v、S 是 3 个等长的向量。S 是要建立的稀疏存储矩阵的非零元素,u(i)、v(i) 分别是 S(i) 的行和列下标
>> A = sparse([1,2,2],[2,1,4],[4,5,7])

A =

   (2,1)        5   (1,2)        4   (2,4)        7

>> B = full(A)

B =

     0     4     0     0     5     0     0     7

使用 spconvert 函数直接建立稀疏存储矩阵,其调用格式为:B = spconvert(A)

A 为一个 m ✖️ 3 或 m ✖️ 4 的矩阵,其每行表示一个非零元素,m 是非零元素的个数

  • A(i,1) 表示第 i 个非零元素所在的行
  • A(i,2) 表示第 i 个非零元素所在的列
  • A(i,3) 表示第 i 个非零元素值的实部
  • A(i,4) 表示第 i 个非零元素值的虚部

若矩阵的全部元素都是实数,则无须第 4 列

>> A = [2,2,1;2,1,-1;2,4,3]

A =

     2     2     1     2     1    -1     2     4     3

>> B = spconvert(A)

B =

   (2,1)       -1   (2,2)        1   (2,4)        3

(3)带状稀疏矩阵的稀疏存储

稀疏矩阵有两种基本类型:无规则结构的稀疏矩阵与有规则结构的稀疏矩阵

带状稀疏矩阵是指所有非零元素集中在对角线上的矩阵。

image-20201015151353520
>> A = [11,0,0,12,0,0;0,21,0,0,22,0;0,0,31,0,0,32;41,0,0,42,0,0;0,51,0,0,52,0]

A =

    11     0     0    12     0     0     0    21     0     0    22     0     0     0    31     0     0    32    41     0     0    42     0     0     0    51     0     0    52     0

>> [B,d] = spdiags(A)

B =

     0    11    12     0    21    22     0    31    32    41    42     0    51    52     0

d =

    -3     0     3

>> A = spdiags(B,d,5,6)

A =

   (1,1)       11   (4,1)       41   (2,2)       21   (5,2)       51   (3,3)       31   (1,4)       12   (4,4)       42   (2,5)       22   (5,5)       52   (3,6)       32

(4)单位矩阵的稀疏矩阵

  • Speye(m,n) 返回一个 m × n 的稀疏存储单位矩阵
>> speye(3)

ans =

   (1,1)        1   (2,2)        1   (3,3)        1

2.5.3 稀疏矩阵的应用实例

题目
>> kf1 = [1;1;2;1;0];>> k0 = [2;4;6;6;1];>> k1 = [0;3;1;4;2];>> B = [kf1,k0,k1];>> d = [-1;0;1];>> A = spdiags(B,d,5,5);>> f = [0;3;2;1;5];>> x = A\f

x =

   -0.1667    0.1111    2.7222   -3.6111    8.6111

三元组顺序表表示的稀疏矩阵加法_Matlab入门教程 第 2 章 Matlab矩阵处理之稀疏矩阵...相关推荐

  1. matlab 判断两个矩阵有元素相等_Matlab入门教程 第 1 章 Matlab基础知识之基本运算...

    1.6 Matlab 基本运算 Matlab 包含三种运算:算术运算.关系运算和逻辑运算. 1.6.1 算术运算 ① 基本算术运算 基本算术运算符:+.-.*./(右除).\(左除).^(乘方) ? ...

  2. 稀疏矩阵的三元组顺序表存储表示及基本操作

    /* Name: 稀疏矩阵的三元组顺序表存储表示及基本操作 Copyright:  Author: 巧若拙  Date: 27-10-14 21:28 Description:  ---------- ...

  3. 2021-10-28 三元组顺序表表示的稀疏矩阵加法

    PTA练习题--稀疏矩阵的加法. 题目分析:此题的核心在于找到行数和列数相等的元素进行求和,若和为零时则舍去,当行数/列数不等时分类进行讨论. 此题共分为七种情况进行讨论,分别为: 1 ai=bi:a ...

  4. 三元组顺序表表示的稀疏矩阵加法

    三元组顺序表表示的稀疏矩阵加法. 输入格式: 输入第1行为两个同型矩阵的行数m.列数n,矩阵A的非零元素个数t1,矩阵B的非零元素个数t2. 按行优先顺序依次输入矩阵A三元组数据,共t1行,每行3个数 ...

  5. 三元组顺序表表示的稀疏矩阵转置(10分)

    三元组顺序表表示的稀疏矩阵转置(10分) 本题要求实现一个函数,实现三元组顺序表表示的稀疏矩阵转置. 函数接口定义: struct tripletable * trans(struct triplet ...

  6. 稀疏矩阵的三元组存储方法c语言,数据结构C语言版 稀疏矩阵的三元组顺序表存储表示和实现...

    陈独秀的秘密 数据结构C语言版 稀疏矩阵的三元组顺序表存储表示和实现 P98 编译环境:Dev-C++ 4.9.9.2 日期:2011年2月8日 */ typedef int ElemType; // ...

  7. 数组:矩阵快速转置 矩阵相加 三元组顺序表/三元矩阵 随机生成稀疏矩阵 压缩矩阵【C语言,数据结构】(内含源代码)

    目录 题目: 题目分析: 概要设计: 二维矩阵数据结构: 三元数组\三元顺序表顺序表结构: 详细设计: 三元矩阵相加: 三元矩阵快速转置: 调试分析: 用户手册: 测试结果: 源代码: 主程序: 头文 ...

  8. 数据结构 稀疏矩阵三元组顺序表 基本操作

    [数据结构]稀疏矩阵 三元组顺序表存储 基本操作 1.稀疏矩阵定义: 假设在 mn 的矩阵中,又t个元素不为零.δ = t/mn ,称δ为矩阵的稀疏因子,通常定义δ小于等于0.05时称为稀疏矩阵. 2 ...

  9. c语言三元组作用,三元组顺序表,稀疏矩阵的三元组表示及(C语言)实现

    本节介绍稀疏矩阵的三元组顺序表压缩存储方式. 通过<矩阵的压缩存储>一节我们知道,稀疏矩阵的压缩存储,至少需要存储以下信息: 矩阵中各非 0 元素的值,以及所在矩阵中的行标和列标: 矩阵的 ...

最新文章

  1. 添物 不花钱学计算机及编程(预备篇)— 编译原理
  2. mysql int zerofill_Mysql 中int[M]—zerofill-阿里云开发者社区
  3. 通俗地解释脏读、不可重复读、幻读
  4. 美国将对所有墨西哥输美商品加征关税,为何日本股市反而大跌?
  5. mysql删除密码代码_mysql 用户新建、受权、删除、密码修改
  6. 机器学习也可以在线做!
  7. 【SpringMVC】SpringMVC+Spring+hibernate整合
  8. 多维动态数组c语言,C语言多维动态数组的实现
  9. Wed Jul 22 00:00:00 CST 2020 java转成指定日期格式的字符串
  10. 黄文俊:Serverless小程序后端技术分享 1
  11. 课堂笔记 Numpy酒鬼漫步
  12. JS实现倒计时动画效果
  13. PDF文件怎么在线拆分?教你在线拆分方法
  14. .NET周报【11月第4期 2022-11-30】
  15. 苹果Xr用不了浏览器显示服务器已停止响应,苹果xrsafari浏览器用不了?
  16. 群晖NAS配置DNSPodDDNS实现外网访问(仅适用于阿里云域名)
  17. 使用 Cloudreve 快速搭建一个强大的个人云盘
  18. 春暖花开,我们去踏青
  19. wifi服务器维护需要多长时间,WIFI服务器设置及维护.ppt
  20. 联通短消息服务器域名,中国联通域名服务器地址

热门文章

  1. 被误读的博弈:谁才是大厂解除屏蔽的最终受益者?
  2. 广告植入、电商导流……“变味”的线上演唱会
  3. 小心,疫情下在线教育免费试听引起的“后遗症”
  4. 齐家网困境:进退两难,合作方和消费者两头都不讨好?
  5. 逆袭“潮牌”后,李宁离安踏还有多远?
  6. access转换成oracle,Access转Oracle工具
  7. python计算最大回撤_Python进阶量化交易场外篇3——最大回撤评价策略风险
  8. java compareto date_int compareTo(Date anotherDate)
  9. 11旋转编码器原理图_雷恩PRECILEC I9H系列增量式编码器
  10. c语言程序设计复习提纲,C语言程序设计复习提纲