首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Networkx和Networkit中都存在错误吗?

在Networkx和Networkit中都存在错误吗?
EN

Stack Overflow用户
提问于 2021-08-05 15:12:29
回答 1查看 237关注 0票数 1

显然,用网络和网络计算的节点之间和边缘之间都给出了与预期值不同的值。

让我们考虑下面的无向图(帕格。20/85在本讲义中),它作为边列表编写,并保存在mygraph.txt

代码语言:javascript
复制
1 2
1 5
2 3
2 5
3 4
4 5
4 6

节点之间的连接应该是(帕格。20/85在本讲义中):

代码语言:javascript
复制
Node | Betweenness
1 0
2 1.5
3 1
4 4
5 3
6 0

但是,通过运行以下代码(我在networkx和networkit中使用G1G2作为图形的不同名称,但它们完全相同,来自同一个文件mygraph.txt):

代码语言:javascript
复制
import networkx as nx
from networkit import *  
import networkit as nk 


G1 = nx.read_edgelist("mygraph.txt",create_using=nx.Graph(), nodetype = int)
G1.number_of_nodes()

node_btw = nx.betweenness_centrality(G1, normalized=False)
edge_btw = nx.edge_betweenness_centrality(G1, k=None, normalized=False, weight=None, seed=None)

print('NETWORK-X')
print(node_btw.values())
print(edge_btw.values())


edgeListReader = nk.graphio.EdgeListReader(' ', 1)
G2 = nk.readGraph("/home/JohnRambo/Documents/myFolder/mygraph.txt", nk.Format.EdgeListTabOne)
print(G2.numberOfNodes(), G2.numberOfEdges()) 

G2.indexEdges()
btwn = nk.centrality.Betweenness(G2, normalized=False, computeEdgeCentrality=True)
btwn.run()

print('NETWORK-IT')
print(btwn.scores()[:10])
print(btwn.edgeScores()[:10])

我得到了以下结果(P.S.:我手动添加了文本node betweennessedge betweenness):

代码语言:javascript
复制
NETWORK-X
node betweenness: [0.0, 1.5, 3.0, 1.0, 4.5, 0.0]
edge betweenness: [2.0, 3.0, 3.5, 2.5, 5.5, 3.5, 5.0]

NETWORK-IT
node betweenness: [0.0, 3.0, 2.0, 9.0, 6.0, 0.0]
edge betweenness: [4.0, 7.0, 7.0, 6.0, 5.0, 11.0, 10.0]

我的计算给出了不同的结果(节点之间的得分与帕格。20/85在本讲义中中显示的值一致)

代码语言:javascript
复制
node betweenness: [0.0, 1.5, 1.0, 4.5, 3.0, 0.0]
edge betweenness: [2.0, 3.0, 3.5, 2.5, 3.5, 5.5, 5.0]

请您澄清并建议解决这个问题的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-06 01:53:16

正如凯尔在他的评论中提到的,网络中的节点是在与edgelist相关的序列中添加的。要解决这个问题,只需简单的排序就可以解决这个问题。第三行输出显示节点的实际顺序。

关于边缘,在从文件中读取边缘列表时发生了意想不到的事情:边缘(4,5)被加载为(5,4)。见第二行输出。这会导致预期的边缘排序顺序(就像文件一样)不同:交换第六节点和第七个节点。

下面的代码按键值(节点号)对节点之间的字典进行排序,同时将中间值放在元组中,输出在第四行。

最后一行以其中间值显示每条边。

代码语言:javascript
复制
import networkx as nx

G1 = nx.read_edgelist("mygraph.txt",create_using=nx.Graph(), nodetype = int)
G1.number_of_nodes()

node_btw = nx.betweenness_centrality(G1, normalized=False)
edge_btw = nx.edge_betweenness_centrality(G1, k=None, normalized=False, weight=None, seed=None)

print('NETWORK-X')
print(tuple(node_btw.keys()))
print(tuple(edge_btw.keys()))
nn_btw = tuple(v for _,v in sorted(node_btw.items(), key=lambda x: x[0]))
print(nn_btw)
en_btw = tuple(v for _,v in sorted(edge_btw.items(), key=lambda x: x[0]))
print(en_btw)
for k,v in sorted(edge_btw.items(),key=lambda x: x[0]):
    print(k, v)

输出:

代码语言:javascript
复制
# NETWORK-X
# (1, 2, 5, 3, 4, 6)
# ((1, 2), (1, 5), (2, 3), (2, 5), (5, 4), (3, 4), (4, 6))
# (0.0, 1.5, 1.0, 4.5, 3.0, 0.0)
# (2.0, 3.0, 3.5, 2.5, 3.5, 5.0, 5.5)
# (1, 2) 2.0
# (1, 5) 3.0
# (2, 3) 3.5
# (2, 5) 2.5
# (3, 4) 3.5
# (4, 6) 5.0
# (5, 4) 5.5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68669231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档