5
我有大型稀疏邻接矩阵与约1M节点,我正在处理与MATLAB。我想尽可能有效地将这些矩阵转换成网络边缘清单。作为一个例子邻接矩阵来说明这一点:在MATLAB中将大型邻接矩阵转换为边缘列表的有效方法?
adj = 1 0 1 0 0 0 1 1 0 0 1 0 0 1 0 0
和输出我叫网络边缘列表这里是:
>> adj2edgeList_Alex(adj) ans = 0 0 0 2 1 2 1 3 2 2 3 1
此代码,我必须这样做,摊位的时间。
function edge_list = adj2edgeList_Alex(graph) edge_num = length(logical(graph > 0)); edge_list = zeros(edge_num,2); row_ind = 1; for ii=1:size(graph,2) ind_temp = find(graph(ii,:)==1); if(isempty(ind_temp) == 0) ind_temp = ind_temp - 1; edges_iter = length(ind_temp); node_num = ii - 1; edge_list(row_ind:row_ind+edges_iter-1,:) = ... [(node_num)*ones(1,edges_iter);ind_temp]'; row_ind = row_ind + edges_iter; end end
是否有修改加快速度?另一个可以执行得更好的功能或工具箱?
你是否分析了你的代码?使用探查器查看它缓慢行动的位置。这将有助于给你提供线索。 – John 2013-04-24 16:55:25