Matlab网络平均路径长度

Matlab网络平均路径长度,matlab,graph-theory,Matlab,Graph Theory,我创建了一个Erdős随机图,它的格式是n×n对称矩阵,属性为稀疏。我尝试使用以下代码计算平均路径长度: % Compute average path length for a network - the average shortest path % INPUTS: adjL - matrix of weights/distances between nodes % OUTPUTS: average path length: the average of the shortest paths

我创建了一个Erdős随机图,它的格式是n×n对称矩阵,属性为稀疏。我尝试使用以下代码计算平均路径长度:

% Compute average path length for a network - the average shortest path
% INPUTS: adjL - matrix of weights/distances between nodes
% OUTPUTS: average path length: the average of the shortest paths between every two edges
% Note: works for directed/undirected networks
% GB, December 8, 2005

function l = ave_path_length(adj)

n=size(adj,1);

dij = [];

for i=1:n; dij=[dij; simple_dijkstra(adj,i) ]; end

l = sum(sum(dij))/(n^2-n); % sum and average across everything but the diagonal
它在以下链接中使用Dijkstra算法:


然而,Matlab变得很忙,我没有得到结果。任何提示都非常感谢。

您正在生成一个矩阵,因为dij从空开始,并随每个循环一起附加,所以它的大小正在变化。在MATLAB中,这会导致运行时间显著减慢,在最坏的情况下,MATLAB将基本挂起

假设您知道dij的最终大小(通过粗略检查,我认为应该是
nxn
),您应该预先分配。在这种情况下,零将起作用:

dij = zeros(n);
for i=1:n
    dij(n,:) = simple_dijkstra(adj,i);
end
如果在MATLAB编辑器中打开原始代码,您可能会在循环中的
dij
下看到一条橙色下划线。这表示警告。将鼠标悬停在其上方,您将收到以下警告:

变量“dij”在每次循环迭代时都会改变大小。 考虑速度的预分配。


即使对于无法100%确定最终大小的情况,也最好将其分配到可能的最大大小,然后减少未使用的部分。

busy表示它正在处理,如果没有生成错误消息,您可能需要等待它。或者在继续处理整个数据部分之前,尽量减少输入的数据量,以查看输出是否正确。