用于创建稀疏矩阵的矩阵索引

Matrix indices for creating sparse matrix

我想创建一个 4 x 4 稀疏矩阵 A。我想为以下条目分配值(例如 1):

A(2,1), A(3,1), A(4,1)
A(2,2), A(3,2), A(4,2)
A(2,3), A(3,3), A(4,3)
A(2,4), A(3,4), A(4,4)

根据manual page,我知道我应该分别按行和列存储索引。也就是说,对于行索引,

r=[2,2,2,2,3,3,3,3,4,4,4,4]

此外,对于列索引

c=[1,2,3,4,1,2,3,4,1,2,3,4]

因为我想给每个条目分配1,所以我使用

value = ones(1,length(r))

那么,我的稀疏矩阵将是

Matrix = sparse(r,c,value,4,4)

我的问题是这样的:

确实,我想构造一个任意维度的方阵。说,如果它是一个 10 x 10 矩阵,那么我的列向量将是

[1,2,..., 10, 1,2, ..., 10, 1,...,10, 1,...10]

对于行向量,它将是

[2,2,...,2,3,3,...,3,...,10, 10, ...,10]

请问有没有一种快速有效地构建这些列向量和行向量的方法?提前致谢。

您可以 sparse 创建完整版本后的矩阵。

A = (10,10);
A(1,:) = 0;
B = sparse(A);

我认为这个问题旨在以简单的方式创建向量c,r

n = 4;

c = repmat(1:n,1,n-1);
r = reshape(repmat(2:n,n,1),1,[]);

Matrix = sparse(r,c,value,n,n);

这通常会创建您指定的向量。

然而,正如其他人指出的那样,由于开销,全稀疏矩阵不是很有效。如果我没记错的话,如果密度低于 25%,稀疏矩阵会提供优势。除了第一行之外的所有内容都会导致性能下降。