MATLAB®从来没有创建自动稀疏矩阵。相反,您必须确定一个矩阵是否包含足够大的零百分比,以从稀疏技术中获益。
的密度矩阵的非零元素数除以矩阵元素总数。对矩阵米
,这将是
nnz (M) /刺激(大小(M));
nnz (M) /元素个数(M);
密度非常低的矩阵通常是使用稀疏格式的很好的候选者。
控件可以将全矩阵转换为稀疏存储稀疏的
函数只有一个参数。
例如:
A = [0 0 0 5 0 2 0 0 1 3 0 0 0 4 0];S =稀疏(A)
S = (3,1) 1 (2,2) 2 (3,2) 3 (4,3) 4 (1,4) 5
的非零元素年代
,以及它们的行和列索引。元素按列排序,反映了内部数据结构。
控件可以将稀疏矩阵转换为全存储完整的
函数,前提是矩阵顺序不是太大。例如,充满(S) =
反转示例转换。
将全矩阵转换为稀疏存储并不是生成稀疏矩阵的最常用方法。如果矩阵的顺序足够小,可以进行全存储,那么转换为稀疏存储很少能带来显著的节省。
属性可以从非零元素列表创建稀疏矩阵稀疏的
函数有五个参数。
S =稀疏(i, j S, m, n)
我
和j
分别为矩阵的非零元素的行和列指标的向量。年代
是否一个非零值的向量,其指标由相应的向量指定(i, j)
对。米
得到的矩阵的行维数是多少n
为列维数。
矩阵年代
可以直接使用
S = sparse([3 2 3 4 1],[1 2 2 3 4],[1 2 3 4 5],4,4)
S = (3,1) 1 (2,2) 2 (3,2) 3 (4,3) 4 (1,4) 5
的稀疏的
Command有许多替代形式。上面的示例使用了一个表单,该表单将矩阵中非零元素的最大数目设置为长度(年代)
.如果需要,您可以附加第6个参数,它指定一个更大的最大值,允许您稍后添加非零元素,而无需重新分配稀疏矩阵。
第二差分算子的矩阵表示是稀疏矩阵的一个很好的例子。它是一个三对角线矩阵,对角线上是-2s,超对角线和次对角线上是1s。有很多方法可以生成它——这里有一种可能。
n = 5;D =稀疏(1:n, 1: n, 2 * (1, n)、n, n);E =稀疏(2:n, 1: n - 1的(n - 1)、n, n);S = E + D + E”
S =(1,1) 2(2, 1) 1(1、2)1(2,2)2(3 2)1(2、3)1(3、3)2(4,3)1(3,4)1(4,4)2(4)1(4、5)1 (5,5)2
现在F =全(S)
显示相应的全矩阵。
F =全(S)
F = -2 1 0 0 0 1 -2 1 0 0 0 1 -2 1 0 0 0 1 -2 1 0 0 0 1 -2
基于对角元素创建稀疏矩阵是一种常见的操作,因此函数spdiags
处理这个任务。它的语法是
S = spdiags (B, d, m, n)
创建一个输出矩阵年代
的大小米——- - - - - -n与元素p
对角线:
B
矩阵的大小是多少分钟(m, n)
——- - - - - -p.的列B
是要填充对角线的值吗年代
.
d
向量的长度是多少p
哪个整数元素指定了哪个对角线年代
填充。
即列中的元素j
的B
填充元素指定的对角线j
的d
.
如果一列B
比它替换的对角线长吗,超对角线是从列的下半部分取的B
,次对角线取自柱的上部B
.
以矩阵为例B
和向量d
.
B = [41 11 0 52 22 0 63 33 13 74 44 24];D = [-3 0 2];
使用这些矩阵来创建一个7 × 4稀疏矩阵一个
:
一个= spdiags (4) B, d, 7日
=(1,1) 11(4,1) 41(2, 2) 22(5, 2) 52(1、3)13(3,3)33(6 3)63(2、4)24 (4,4)44 (7,4)74
就其完整形式而言,一个
是这样的:
完整的(一个)
Ans = 11 0 13 0 0 22 0 24 0 0 33 0 41 0 0 44 0 52 0 0 0 0 63 0 0 0 0 74
spdiags
还可以从稀疏矩阵中提取对角元素,或者用新值替换矩阵对角元素。类型帮助
spdiags
获取详细信息。
您可以从MATLAB环境之外的计算中导入稀疏矩阵。使用spconvert
函数与负载
命令导入包含索引和非零元素列表的文本文件。例如,考虑一个三列的文本文件T.dat
它的第一列是行索引的列表,第二列是列索引的列表,第三列是非零值的列表。这些语句加载T.dat
并将其转换为稀疏矩阵年代
:
负载T.datS = spconvert (T)