第十二讲:Matlab稀疏矩阵介绍

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

满矩阵与稀疏矩阵
满矩阵与稀疏矩阵之间的转化 S=sparse(A)%将以任何形式存储的矩阵转换为 将以任何形式存储的矩阵转换为 稀疏矩阵形式。 稀疏矩阵形式。 A=full(S) )%将以任何形式存储的矩阵转换为满矩 将以任何形式存储的矩阵转换为满矩
阵(全元素)形式。 全元素)形式。
源自文库
例: A=[0 0 5 0; 3 0 3 0 ; 0 0 0 1; 0 4 3 0]
S=sparse(A) whos Full(S)
直接创建稀疏矩阵
直接创建稀疏矩阵 S=sparse(i,j,s,m,n)
分别是矩阵非零元素的行和列指标向量 指标向量, 其中 i 和 j 分别是矩阵非零元素的行和列指标向量,s 分别是矩阵的行数 行数和 是非零元素值向量,m、n 分别是矩阵的行数和列数 非零元素值向量,
查看稀疏矩阵
通常的存储信息 whos 非零元素信息。 非零元素信息。 nnz(S) % 返回非零元素的个数 nonzeros(S) % 返回列向量,包含所有的非零元素 返回列向量, nzmax(S) % 返回分配给稀疏矩阵中非零项的总的存储空间 查看稀疏矩阵的形状 spy(S)
find 函数与稀疏矩阵
% random, m-by-n, sparse matrix with % approximately density*m*n uniformly % distributed nonzero entries
S=bucky
% 一个内置的稀疏矩阵(邻接矩阵) 一个内置的稀疏矩阵(邻接矩阵)
查看稀疏矩阵
例: B=rand(4,2);
S3=spdiags(B,[0 1],4,4)
其它稀疏矩阵创建函数
其它稀疏矩阵创建函数
S=speye(m,n) S=speye(size(A)) R=sprand(S)
% R has the same sparsity structure as S
S=sprand(m,n,density)
find 函数与稀疏矩阵 [i,j,s]= find(S) [i,j]= find(S)
中所有非零元素的下标和数值, 返回 S 中所有非零元素的下标和数值,S 可以是稀疏矩 阵或满矩阵。 阵或满矩阵。
稀疏矩阵的运算
稀疏矩阵的运算
Matlab 中对满矩阵的运算和函数同样可用在稀疏矩阵中。 中对满矩阵的运算和函数同样可用在稀疏矩阵中。 结果是稀疏矩阵还是满矩阵, 结果是稀疏矩阵还是满矩阵,取决于运算符或者函数及下列 几个原则: 几个原则: 当函数用一个矩阵作为输入参数,输出参数为一个标量 当函数用一个矩阵作为输入参数,输出参数为一个标量 矩阵作为输入参数 参数为一个 或者一个给定大小的向量 向量时 或者一个给定大小的向量时,输出参数的格式总是返回一 满矩阵形式 形式, 个满矩阵形式,如命令 size 等。 当函数用一个标量或者一个向量作为输入参数,输出参 当函数用一个标量或者一个向量作为输入参数,输出参 一个标量或者一个向量作为输入参数 矩阵时 输出参数的格式也总是返回一个满矩阵 满矩阵, 数为一个矩阵 数为一个矩阵时,输出参数的格式也总是返回一个满矩阵, 如命令 eye,rand 等。还有一些特殊的命令可以得到稀疏 , 矩阵, 矩阵,如命令 speye,sprand 等。 ,
例: A=eye(4); B=speye(4); [i,j]=find(A);
S1=A(i,j); whos S1=B(i,j); whos A(i,j)=2*B(i,j); whos B(i,j)=A(i,j)^2; whos
稀疏矩阵的运算
对于单参数的其他函数来说,通常返回的结果和参数的形 对于单参数的其他函数来说,通常返回的结果和参数的形 单参数的其他函数来说 式是一样的 。(sparse 和 full 是例外) 是例外) 式是一样的,如 diag、max 等。( 、 对于双参数的运算或者函数来说, 对于双参数的运算或者函数来说,如果两个参数的形式 双参数的运算或者函数来说 一样,那么也返回同样形式的结果。 一样,那么也返回同样形式的结果。在两个参数形式不一 样的情况下,除非运算的需要,均以满矩阵 满矩阵的形式给出结 样的情况下,除非运算的需要,均以满矩阵的形式给出结 果。
带状稀疏矩阵的创建 S=spdiags(B,d,m,n)
分别是矩阵的行数和列数; 其中 m 和 n 分别是矩阵的行数和列数;d 是长度为 p 的整数向量, 的对角线位置; 的整数向量,它指定矩阵 S 的对角线位置;B 是全元素 矩阵, 对角线位置上的元素, 矩阵,用来给定 S 对角线位置上的元素,行数为 min(m,n),列数为 p 。 ,
例:设文本文件 T.txt 中有三列内容,第一列是一些行下标, 中有三列内容,第一列是一些行下标,
第二列是列下标,第三列是非零元素值。 第二列是列下标,第三列是非零元素值。 1 2 2 3 4 4 3 1 3 4 2 3 5 3 3 1 4 3
load T.txt S=spconvert(T)
带状稀疏矩阵的创建
例: A=eye(4); B=speye(4);
S1=A+B; S2=A*B; S3=A\B; S4=A.*B; whos
稀疏矩阵的运算
在赋值语句的右侧的子矩阵索引保留参数的存储形式, 在赋值语句的右侧的子矩阵索引保留参数的存储形式,即: 对于 T=S ( i, j ),若 S 是稀疏矩阵,i, j 是向量或标量,则 T , 是稀疏矩阵, 是向量或标量, 也是稀疏矩阵。 也是稀疏矩阵。 在赋值语句的左侧的子矩阵索引不会改变左侧矩阵的存储 形式。 形式。
创建稀疏矩阵
创建稀疏矩阵
稀疏矩阵的创建需要用户来决定。用户需要判断在矩阵 稀疏矩阵的创建需要用户来决定。 中是否有大量的零元素,是否需要采用稀疏存储技术。 中是否有大量的零元素,是否需要采用稀疏存储技术。 如果某个矩阵以稀疏方式存储,则它参与运算的结果也将 如果某个矩阵以稀疏方式存储, 以稀疏方式存储,除非运算本身使得稀疏性消失。 以稀疏方式存储,除非运算本身使得稀疏性消失。 矩阵的密度定义为矩阵中非零元素的个数除以矩阵中总 矩阵的密度定义为矩阵中非零元素的个数除以矩阵中总 密度 的元素个数。对于低密度的矩阵, 的元素个数。对于低密度的矩阵,采用稀疏方式存储是一 种很好的选择。 种很好的选择。
Matlab 稀疏矩阵操作
稀疏矩阵介绍
稀疏矩阵
阶矩阵, 对于一个 n 阶矩阵,通常需要 n2 的存储空间和正比于n3 的计算时间, 很大时, 的计算时间,当 n 很大时,进行矩阵运算时会占用大量的内 存空间和运算时间。 存空间和运算时间。 在许多实际问题中遇到的大规模矩阵中通常含有大量 0 元素,这样的矩阵称为稀疏矩阵。 元素,这样的矩阵称为稀疏矩阵。 Matlab 支持稀疏矩阵,只存储矩阵的非零元素,这在矩 支持稀疏矩阵,只存储矩阵的非零元素, 阵的存储空间和计算时间上都有很大的优点。 阵的存储空间和计算时间上都有很大的优点。 稀疏矩阵及其算法: 元素, 稀疏矩阵及其算法:不存储那些 0 元素,也不对它们进行 操作,从而节省内存空间和计算时间, 操作,从而节省内存空间和计算时间,稀疏矩阵计算的复杂 性和代价仅仅取决于稀疏矩阵的非零元素的个数。 性和代价仅仅取决于稀疏矩阵的非零元素的个数。
稀疏矩阵存储
稀疏矩阵的存储
Matlab 的两种存储矩阵的方式: 的两种存储矩阵的方式: 全元素存储(满矩阵)和稀疏存储(稀疏矩阵) 全元素存储(满矩阵)和稀疏存储(稀疏矩阵) 稀疏存储:仅存储非零元素及其下标 稀疏存储:仅存储非零元素及其下标 非零元素及其 设一个m*n的稀疏矩阵有 nnz 个非零元素,Matlab 需要 的稀疏矩阵有 个非零元素, 设一个 三个数组存储实型的稀疏矩阵, 三个数组存储实型的稀疏矩阵,第一个数组存储所有的非 零元素, 零元素,这个数组的长度为 nnz,第二个数组存储非零元 , 素所对应的行标, 素所对应的行标,长度也是 nnz,第三个数组存储指向每 , 一列开始的指针, 一列开始的指针,这个数组的长度为 n。这个矩阵的存储 。 包含nnz个浮点数和 个浮点数和nnz+n个整数 个整数. 包含 个浮点数和 个整数
例: S2=sparse([1 2 2 3 4 4],[3 1 3 4 2 3],...
[5 3 3 1 4 3],4,4)
利用文件创建稀疏矩阵
利用文件创建稀疏矩阵
函数可以从包含一系列下 利用 load 和 spconvert 函数可以从包含一系列下 标和非零元素的文本文件中输入稀疏矩阵 中输入稀疏矩阵。 标和非零元素的文本文件中输入稀疏矩阵。
相关文档
最新文档