对于大型网络结构,我有一个来自节点的nx2矩阵。我用它来创建一个稀疏的邻接矩阵,我可以用BIOGRAPH绘制它。我的系统大小不一,最大的系统有超过3000个节点(显然不适合绘图)。
如果我选择一行,我希望能够为给定的X(通常为3)创建一个包含原始行(两个节点)X“步”范围内的所有行和节点的列表。使用蛮力显然不是太困难。但是,我需要尽快做到这一点。
adj_mat = sparse(from_nodes, to_nodes, 1, s, s);
有没有办法可以使用邻接矩阵?我可以使用to / from列表更有效地完成吗?
我现在所做的是找到连接到所选行的节点的索引,然后搜索整个to-from节点列表,并查找to / from元素等于其中一个节点的所有行。选定的行。然后我使用新的节点列表并搜索整个到/从列表,再次搜索这些节点。
我现在使用的代码如下所示:
% tempBranch = the branches connected to the list of the current branches
k = 1;
for i = 1:nnz(nodeList) % number of after step X-1 (for X=0 this is
% equal to the nodes connected to the chosen line
for j = 1:n % n = number of lines
if branchList(j,1) == nodeList(i) || branchList(j,2) == nodeList(i)
tempBranch(k) = j;
k = k + 1;
end
end
end
谢谢!
答案 0 :(得分:0)
一个好的起点是找到距离两个给定节点k
和i
小于j
边缘的所有节点。使用您构建的邻接矩阵非常容易。
A
的对角线上添加1。v
的向量0
,除了组件i
和j
,您放置1
。A^k*v
。条目非零的所有节点都在两个起始点的k
边缘内(注意条目的值是k路径的数量!)。您可以使用find
函数自动提取这些索引。这应该非常有效!
从节点来看,我认为找到你想要的边缘应该很容易。
希望它有所帮助!