在MATLAB中的邻接矩阵中从所选行中查找X步骤内的所有边(和节点)

时间:2013-05-02 09:50:54

标签: matlab connectivity adjacency-matrix

对于大型网络结构,我有一个来自节点的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

谢谢!

1 个答案:

答案 0 :(得分:0)

一个好的起点是找到距离两个给定节点ki小于j边缘的所有节点。使用您构建的邻接矩阵非常容易。

  1. 在矩阵A的对角线上添加1。
  2. 构建所有v的向量0,除了组件ij,您放置1
  3. 现在,计算A^k*v。条目非零的所有节点都在两个起始点的k边缘内(注意条目的值是k路径的数量!)。您可以使用find函数自动提取这些索引。
  4. 这应该非常有效!

    从节点来看,我认为找到你想要的边缘应该很容易。

    希望它有所帮助!