在循环中创建稀疏矩阵
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 最初提出的答案
我想从存储在 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 最初提出的答案