【问题标题】:Efficient way of converting large adjacency matrices to edge lists in MATLAB?在MATLAB中将大型邻接矩阵转换为边列表的有效方法?
【发布时间】:2013-04-24 16:34:12
【问题描述】:

我有 大型稀疏邻接矩阵,大​​约有 1M 个节点,我正在使用 MATLAB 处理这些矩阵。我想尽可能高效地将这些矩阵转换为网络边缘列表。作为一个示例邻接矩阵来说明这一点:

调整 = 1 0 1 0 0 0 1 1 0 0 1 0 0 1 0 0

我在这里称为网络边缘列表的输出是:

>> adj2edgeList_Alex(adj) 答案= 0 0 0 2 1 2 1 3 2 2 3 1

我必须做的这段代码拖延了时间。

函数 edge_list = adj2edgeList_Alex(graph) edge_num = 长度(逻辑(图 > 0)); edge_list = zeros(edge_num,2); row_ind = 1; 对于 ii=1:size(graph,2) ind_temp = find(graph(ii,:)==1); if(isempty(ind_temp) == 0) ind_temp = ind_temp - 1; edge_iter = 长度(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 + edge_iter; 结尾 结尾

是否有任何修改可以加快速度?另一个性能更好的功能或工具箱?

【问题讨论】:

  • 你有没有分析过你的代码?使用分析器查看它在哪里运行缓慢。这将有助于为您提供线索。

标签: matlab optimization matrix graph-theory adjacency-matrix


【解决方案1】:

你可以使用find():

[r,c] = find(adj)
edges = [r,c];

请注意,MATLAB 索引从 1 而不是 0,但您可以简单地通过 edges-1 进行变基。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多