我试图在有向图上找到两个顶点之间的路径。我有一个igraph对象,它是有向图。我有一个父节点,以及具有所需属性的节点的顶点序列列表。我希望在此有向图中找到从父节点到具有属性的这些节点的路径。
igraph中唯一相关的命令似乎是“ all_simple_paths”(如果我要使用内置函数来提高效率,而不是编写自己的函数)。然后,我将不得不找到一种方法来处理方向性问题。
但是,即使作为初步方法,我也无法从igraph上使用all_simple_paths!
错误因此是:
回溯(最近通话最近):文件 “ /homes/jlada/Documents/omnipath_folder/full_network/vss.py”,第3行, 在 从igraph导入all_simple_paths ImportError:无法从“ igraph”导入名称“ all_simple_paths” (/nfs/software/software/Linux_x86_64/opt/stow/anaconda3/envs/pypath/lib/python3.7/site-packages/igraph/init.py)
注意:我已检查是否已安装正确版本的igraph,即python-igraph
我正在运行代码:
from pypath import main, data_formats
import igraph
from igraph import all_simple_paths
import time
protein = 'BMP7'
max_order= 3
pa = main.PyPath()
pa.init_network(pfile = '/homes/jlada/Documents/omnipath_folder/mynetwork.pickle')
pa.set_transcription_factors()
#network_graph = pa.gs_neighborhood(protein, order = max_order)
sub_bmp7_2 = pa.get_directed(
pa.graph.induced_subgraph(
list(pa.gs_neighborhood(protein, order = max_order).vs()
)
))
vsparent = [v for v in sub_bmp7_2.vs() if v['name']== protein]
#neighboraffects=set(pa.up_affects('BMP7').up())
tfs_ind=[v for v in sub_bmp7_2.vs() if v['tf']]
print(tfs_ind)
j = all_simple_paths(sub_bmp7_2, vsparent, tfs_ind[1], mode= "out")
print(j)
我想我应该检查函数all_simple_paths是否在igraph中,所以尝试过:
import pypath
import igraph
import inspect
print(inspect.getmembers(igraph))
输出非常长。不幸的是,我不知道如何查询输出以查看其是否包含all_simple_paths。我确实手动进行了操作,据我所知,没有功能all_simple_paths。
有人有没有不包含all_simple_paths的igraph经验吗?这是版本吗?
答案 0 :(得分:0)
igraph不包含all_simple_paths
,但是igraph for R does。您可能混淆了两者。
根据this answer,可以很容易地构筑一个简单的解决方案。