我想从图表中创建一个稀疏矩阵,该矩阵存储在Mx2矩阵中:
for i = 1:m
adj = sparse(Graph(i,1), Graph(i,2), 1);
end
但adj
只保留一个值。我不知道循环之前有多大adj
。
如何告诉MATLAB创建这个稀疏矩阵?
答案 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最初提出答案