【问题标题】:Finding all edges (and nodes) within X steps from a chosen line in an adjacency matrix in MATLAB从 MATLAB 中的邻接矩阵中的选定线查找 X 步内的所有边(和节点)
【发布时间】:2013-05-02 09:50:53
【问题描述】:

我有一个用于大型网络结构的 nx2 节点矩阵。我用它来创建一个稀疏邻接矩阵,我可以使用 BIOGRAPH 绘制它。我的系统大小不一,最大的有 3000 多个节点(显然不适合绘图)。

如果我选择一条线,我希望能够为给定的 X(通常为 3)创建一个列表,其中包含从原始线(两个节点)开始的 X 个“步骤”内的所有线和节点。使用蛮力显然不是太难。但是,我需要尽快完成此操作。

  adj_mat = sparse(from_nodes, to_nodes, 1, s, s); 

有没有办法使用邻接矩阵来解决这个问题?我可以使用 to/from 列表更有效地做到这一点吗?

我现在要做的是找到连接到所选线的节点的索引,然后搜索整个 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

谢谢!

【问题讨论】:

  • 您是否安装了生物信息学工具箱?
  • @eitan-t:是的。你知道getrelatives 函数是否有效吗?这将在稍后翻译成另一种语言,因此如果可以实现代码(或伪代码),那就太好了!

标签: matlab connectivity adjacency-matrix


【解决方案1】:

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

  1. 在矩阵的对角线上加 1 A
  2. 构建所有0 的向量v,但组件ij 除外,您将1 放在其中。
  3. 现在,计算A^k*v。条目非零的所有节点都在两个起点的k 边内(注意条目的值是k-paths 的数量!)。您可以使用 find 函数自动提取这些索引。

这应该是相当有效的!

从节点上,我认为应该很容易找到你要找的边。

希望对你有帮助!

【讨论】:

  • 谢谢!这正是我正在寻找的解决方案! =)
  • 我发现如果我想进一步扩展我的系统,最有效的方法不是取A的k次方,而是执行以下操作:'while ~finished v = A *五;结束'
  • 我不完全了解 Matlab 如何计算矩阵的幂,但您的解决方案可能确实更快。感谢您的更新!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多