主要内容

构造稀疏矩阵

创建稀疏矩阵

MATLAB®从来没有创建自动稀疏矩阵。相反,您必须确定一个矩阵是否包含足够大百分比的零,以便从稀疏技术中获益。

密度矩阵的非零元素数除以矩阵元素总数。对矩阵,这将是

nnz (M) /刺激(大小(M));
nnz (M) /元素个数(M);

密度非常低的矩阵通常是使用稀疏格式的好候选者。

将完全转换为稀疏

方法可以将完整矩阵转换为稀疏存储稀疏的具有单个参数的函数。

例如:

A = [0 0 0 5 0 2 0 0 1 3 0 0 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 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有许多替代形式。上面的例子使用了一种形式,将矩阵中非零元素的最大数目设置为长度(年代).如果需要,您可以添加指定更大最大值的第六个参数,从而允许您稍后添加非零元素,而无需重新分配稀疏矩阵。

二阶差分算子的矩阵表示是稀疏矩阵的一个很好的例子。它是一个三对角矩阵,对角线上有-2s,上对角线和子对角线上有1。有很多方法可以产生它——这里有一种可能性。

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 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 52 0 0 0 0 63 0 0 0 0 0 74

spdiags还可以从稀疏矩阵中提取对角元素,或用新值替换矩阵对角元素。类型帮助spdiags获取详细信息。

进口稀疏矩阵

你可以从MATLAB环境之外的计算中导入稀疏矩阵。使用spconvert函数与负载用于导入包含索引和非零元素列表的文本文件的命令。例如,考虑一个三列文本文件T.dat它的第一列是行索引的列表,第二列是列索引的列表,第三列是非零值的列表。这些语句加载T.dat并把它转换成一个稀疏矩阵年代

负载T.datS = spconvert (T)

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

另请参阅

|

相关的话题