在函数中使用错误的 networkx 前辈
Posted
技术标签:
【中文标题】在函数中使用错误的 networkx 前辈【英文标题】:Wrong networkx predecessors when used inside a function 【发布时间】:2022-01-01 22:28:30 【问题描述】:我试图在图表G
中找到我的节点的父节点,但是当我在函数中使用predecessor
方法时,我的过滤方法返回错误的答案。
MWE:
import networkx as nx
G=nx.MultiDiGraph()
G.add_node("Z_1")
G.add_node("Z_0")
G.add_node("X_1")
G.add_edge('X_1','Z_1')
G.add_edge('Z_0','Z_1')
查找不同时间索引节点的简单函数:
def node_parents(node: str, temporal_index: int = None) -> tuple:
# Returns the parents of this node with optional filtering on the time-index.
if temporal_index:
# return (*[v for v in G.predecessors(node) if v.split("_")[1] == str(temporal_index)],)
return tuple(filter(lambda x: x.endswith(str(temporal_index)), G.predecessors(node)))
else:
return tuple(G.predecessors(node))
现在,让我们使用函数:
node_parents("Z_1",0)
>>>('X_1', 'Z_0')
好的。让我们在函数外的过滤器中使用predecessor
方法:
(*[v for v in G.predecessors('Z_1') if v.split("_")[1] == "0"],)
>>>('Z_0',)
在本例中,我要做的就是过滤掉索引为零的节点(即末尾有零的字符串)。但由于某种原因,我得到了不同的答案。这是为什么呢?
【问题讨论】:
Atemporal_index
为零计算为假。你的意思是写if temporal_index is not None:
。
哦 ffs。很好,谢谢。
【参考方案1】:
感谢@Paul Brodersen,正确的写法是:
def node_parents(node: str, temporal_index: int = None) -> tuple:
# Returns the parents of this node with optional filtering on the time-index.
if temporal_index is not None:
# return (*[v for v in G.predecessors(node) if v.split("_")[1] == str(temporal_index)],)
return tuple(filter(lambda x: x.endswith(str(temporal_index)), G.predecessors(node)))
else:
return tuple(G.predecessors(node))
【讨论】:
以上是关于在函数中使用错误的 networkx 前辈的主要内容,如果未能解决你的问题,请参考以下文章
Python:获取所有节点的度数,然后在networkx中绘制箱线图