我注意到networkx.contracted_nodes(G,u,v)
的行为不一致。只要u
和v
都没有,该函数就会在图G
中收缩(合并)节点u
和v
。自循环边缘。如果存在循环,则该函数将删除自循环而不是合并节点。例如:
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
这是错误,未定义的行为还是未记录的功能?
P.S。该错误已在2.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)
为u
,1
为w
。它循环遍历2
表单的所有边缘,(v,w,d)
始终等于x
,v
是边缘中的另一个节点,w
是数据对于边缘(在你的情况下没有)。
说到d
边缘,它会在(2,2)
u
和1
w
之间添加一条边。这会导致2
成为新图表中的节点。
因此需要更好地处理案例2
。
我添加了bug report。
编辑看来这个错误将在即将发布的下一个版本中修复。