在循环内创建稀疏矩阵

时间:2016-03-18 19:08:26

标签: matlab matrix sparse-matrix adjacency-matrix

我想从图表中创建一个稀疏矩阵,该矩阵存储在Mx2矩阵中:

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

adj只保留一个值。我不知道循环之前有多大adj。 如何告诉MATLAB创建这个稀疏矩阵?

1 个答案:

答案 0 :(得分:2)

不需要for循环。 sparse函数接收非零行位置的向量,非零列位置的向量和非零值的向量。如果所有值都相同,您只需使用标量值一次初始化所有值。

只需这样做 1

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

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

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

1。感谢Luis Mendo最初提出答案