Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:在networkX中检测循环_Python_Loops_Networkx_Cycle_Feedback - Fatal编程技术网

python:在networkX中检测循环

python:在networkX中检测循环,python,loops,networkx,cycle,feedback,Python,Loops,Networkx,Cycle,Feedback,正如标题所暗示的,我正在尝试编写一个函数,该函数将计算任何输入节点所属的循环数。我发现了一个有用的方法,解释了寻找周期的算法背后的理论,但我很难理解如何使用networkX而不是站点使用的数据结构来实现它。我无法理解白色/灰色/等色集合的概念,也无法遍历网络并找到循环 我的功能参数/结构: def feedback_loop_counter(G, node): c = 0 calculate all cycles in the network for every cycl

正如标题所暗示的,我正在尝试编写一个函数,该函数将计算任何输入节点所属的循环数。我发现了一个有用的方法,解释了寻找周期的算法背后的理论,但我很难理解如何使用networkX而不是站点使用的数据结构来实现它。我无法理解白色/灰色/等色集合的概念,也无法遍历网络并找到循环

我的功能参数/结构:

def feedback_loop_counter(G, node):
    c = 0
    calculate all cycles in the network
    for every cycle node is in, increment c by 1
    return c
网络也有输入和输出节点,我不清楚它们是如何影响计算周期的

这是我的输入网络:

import networkx as nx
import matplotlib.pyplot as plt
G=nx.DiGraph()
molecules = ["CD40L", "CD40", "NF-kB", "XBP1", "Pax5", "Bach2", "Irf4", "IL-4", "IL-4R", "STAT6", "AID", "Blimp1", "Bcl6", "ERK", "BCR", "STAT3", "Ag", "STAT5", "IL-21R", "IL-21", "IL-2", "IL-2R"]
Bcl6 = [("Bcl6", "Bcl6"), ("Bcl6", "Blimp1"), ("Bcl6", "Irf4")]
STAT5 = [("STAT5", "Bcl6")]
IL_2R = [("IL-2R", "STAT5")]
IL_2 = [("IL-22", "IL-2R")]
BCR = [("BCR", "ERK")]
Ag = [("Ag", "BCR")]
CD40L = [("CD40L", "CD40")]
CD40 = [("CD40", "NF-B")]
NF_B = [("NF-B", "Irf4"), ("NF-B", "AID")]
Irf4 = [("Irf4", "Bcl6"), ("Irf4", "Pax5"), ("Irf4", "Irf4"), ("Irf4", "Blimp1")]
ERK = [("ERK", "Bcl6"), ("ERK", "Blimp1"), ("ERK", "Pax5")]
STAT3 = [("STAT3", "Blimp1")]
IL_21 = [("IL-21", "IL-21R")]
IL_21R = [("IL-21R", "STAT3")]
IL_4R = [("IL-4R", "STAT6")]
STAT6 = [("STAT6", "AID"), ("STAT6", "Bcl6")]
Bach2 = [("Bach2", "Blimp1")]
IL_4 = [("IL-4", "IL-4R")]
Blimp1 = [("Blimp1", "Bcl6"), ("Blimp1", "Bach2"), ("Blimp1", "Pax5"), ("Blimp1", "AID"), ("Blimp1", "Irf4")]
Pax5 = [("Pax5", "Pax5"), ("Pax5", "AID"), ("Pax5", "Bcl6"), ("Pax5", "Bach2"), ("Pax5", "XBP1"), ("Pax5", "ERK"), ("Pax5", "Blimp1")]
edges = Bcl6 + STAT5 + IL_2R + IL_2 + BCR + Ag + CD40L + CD40 + NF_B + Irf4 + 
ERK + STAT3 + IL_21 + IL_21R + IL_4R + STAT6 + Bach2 + IL_4 + Blimp1 + Pax5
G.add_nodes_from(molecules)
G.add_edges_from(edges)
sources = ["Ag", "CD40L", "IL-2", "IL-21", "IL-4"]
targets = ["XBP1", "AID"]

找到循环的想法是做一个循环,当你做的时候,记住你已经看到了哪些节点以及它们的路径。如果您碰巧访问了一个您已经看到的节点,那么有一个循环,您可以通过连接路径找到它


尝试编写一些代码来实现这一点,如果您陷入困境,请用这些代码打开一个新问题。查找循环的想法是执行一个任务,在执行过程中,记住您已经看到的节点以及它们的路径。如果您碰巧访问了一个您已经看到的节点,那么有一个循环,您可以通过连接路径找到它


试着写一些代码来做这件事,如果你被卡住了,用这些代码打开一个新的问题,我将在假设你对“简单循环”感兴趣的情况下写我的答案,也就是说,循环的唯一重复节点是第一个/最后一个节点


将那些具有边的节点添加到节点
u
(“输入节点”)。然后使用networkx命令查找从
u
到每个输入节点的所有简单路径。每一个都变成了一个简单的循环。

我将在假设你对“简单循环”感兴趣的情况下写出我的答案,也就是说,循环的唯一重复节点是第一个/最后一个节点


将那些具有边的节点添加到节点
u
(“输入节点”)。然后使用networkx命令查找从
u
到每个输入节点的所有简单路径。每一个都变成了一个简单的循环。

这样做,似乎在我手动检查网络后,它也能提供良好的输出。谢谢你的帮助。这样做的话,在我用手检查网络后,看起来输出效果不错。谢谢你的帮助。