文档

构造稀疏矩阵

创建稀疏矩阵

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哪个整数元素指定了哪个对角线年代填充。

即列中的元素jB填充元素指定的对角线jd

请注意

如果一列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)

保存负载命令还可以处理以二进制数据存储在mat文件中的稀疏矩阵。

另请参阅

|

相关的话题