在networkx中使用自循环来收缩节点

时间:2017-08-03 06:26:09

标签: python python-3.x networkx

我注意到networkx.contracted_nodes(G,u,v)的行为不一致。只要uv都没有,该函数就会在图G中收缩(合并)节点uv。自循环边缘。如果存在循环,则该函数将删除自循环而不是合并节点。例如:

G = nx.Graph([(1,1), (1,2), (2,2)]) # Two nodes
H = nx.contracted_nodes(G, 1, 2, self_loops=False)
H.edges() # Should be one node now

输出:

[(1, 1), (1, 2)] # Nope, same two nodes, but only one edge

这是错误,未定义的行为还是未记录的功能?

Current documentation

P.S。该错误已在2.1中修复。

1 个答案:

答案 0 :(得分:1)

对我来说这看起来像个错误。 FWIW,即使没有-(NSString*)getASCIIString:(NSString*)strHex { NSMutableString *strAscii = [NSMutableString string]; for (int i=0;i<24;i+=2) { NSString *charValue = [strHex substringWithRange:NSMakeRange(i,2)]; unsigned int _byte; [[NSScanner scannerWithString:charValue] scanHexInt: &_byte]; if (_byte >= 32 && _byte < 127) { [strAscii appendFormat:@"%c", _byte]; } else { [strAscii appendFormat:@"[%d]", _byte]; } } NSLog(@"Hex: %@", strHex); NSLog(@"Ascii: %@", strAscii); return strAscii; } 中的(1,1)边缘也会发生。  在source code中,对于无向图,它确实

G

在您的情况下,new_edges = ((u, w, d) for x, w, d in G.edges(v, data=True) if self_loops or w != u) u1w。它循环遍历2表单的所有边缘,(v,w,d)始终等于xv是边缘中的另一个节点,w是数据对于边缘(在你的情况下没有)。

说到d边缘,它会在(2,2) u1 w之间添加一条边。这会导致2成为新图表中的节点。

因此需要更好地处理案例2

我添加了bug report

编辑看来这个错误将在即将发布的下一个版本中修复。