2016-08-19 154 views
2

我有一个大的稀疏邻接矩阵,大约有10M节点,我正在用MATLAB进行处理。我想尽可能有效地将矩阵转换为邻接列表。作为一个例子邻接矩阵来说明这一点:matlab将邻接矩阵转换为邻接表

adj = 
    1  0  1 
    0  0  1 
    0  1  1 

,输出是:

ans = 
    0  0  2 
    1  2 
    2  1  2 

我想尽可能高效地做到这一点有可能,有没有什么有效的方式来做到这一点?

+0

稀疏矩阵将是比什么,你会改变这个以邻接表得到更好的代表。有一点要记住的是,MATLAB中的矩阵(包括稀疏)是列主要的,所以你应该相应地定位你的矩阵。 – beaker

回答

0

结果需要是矢量的单元阵列,因为连接到每个节点的节点数量会有所不同。这里有一个办法做到这一点:

[ii, jj] = find(adj); % row and col indices of connections 
y = accumarray(ii, jj-1 , [], @(x){sort(x.')}); % get all nodes connected to each node, 
    % sorted. Subtract 1 for 0-based indexing 

这给

>> celldisp(y) 
y{1} = 
    0  2 
y{2} = 
    2 
y{3} = 
    1  2