在循环中创建稀疏矩阵

Creating sparse matrix within a loop

我想从存储在 Mx2 矩阵中的图形创建一个稀疏矩阵:

for i = 1:m
    adj = sparse(Graph(i,1), Graph(i,2), 1);
end

但是adj只保留一个值。我不知道 adj 在循环之前会有多大。 我怎样才能告诉 MATLAB 创建这个稀疏矩阵?

不需要 for 循环。 sparse 函数接受一个非零行位置向量、一个非零列位置向量和一个非零值向量。如果所有值都相同,您可以简单地使用标量值一次初始化所有值。

只需这样做1:

adj = sparse(Graph(:,1), Graph(:,2), 1);

这将使用 Graph(:,1) 访问所有行位置,使用 Graph(:,2) 访问列位置,最后我们将这些位置的所有值初始化为 1。

这还假设您在 Graph 中有非重复的行和列位置。如果您确实有重复的行和列位置,则在这些位置定义的非零值将累积到相同的位置。例如,如果我们的矩阵中有三个 (6,3) 实例,则 sparse 矩阵中此位置的输出将为 3.


1.感谢 Luis Mendo 最初提出的答案