我正在编写一些python代码来创建两个节点之间的边缘,然后从其中一个节点中随机删除2个边,但是使用其他节点(不是原始节点)。
现在我被卡住(并多次查看所有networkx文档)。
我打电话/命名其中一个节点" bad_apple_Bad_apple" - 我捕获的另一个是" self.most_central_node"中最重要的节点。使用max函数来识别它。我似乎无法选择节点对象本身,以便我可以使用add_edge()创建边缘。
我非常确定我需要解释更多,但下面是代码。如果需要的话,我可以发布更多的代码,但我尝试在代码文件中稍微进一步了解我正在做的事情。
self.most_central_node = max(nx.closeness_centrality(self.combined_network))
print("The node with the max value for closeness centrality in the combined network is: ", self.most_central_node)
self.bad_apple_node_stuff = self.combined_network['bad_apple_Bad_apple']
print("This is the bad apple test", self.bad_apple_node_stuff) #This is not printing the node object which means I'm not selecting it. It's printing it's attributes, I think. This is where the issue is.
self.combined_network.add_edge(self.combined_network.node['bad_apple_Bad_apple'], self.combined_network.node['closeness'==self.most_central_node]) #<<-- this doesnt work, no specific error though
答案 0 :(得分:1)
您的代码存在一些问题。在该行:
self.most_central_node = max(nx.closeness_centrality(self.combined_network))
closeness_centrality
实际上返回一个字典,其中节点是键,其中心是值。您的行只是通过整数或最长字符串或其他任何节点选择最大节点。你应该改为:
close = nx.closeness_centrality(self.combined_network)
from operator import itemgetter
self.most_central_node = max(close.items(), key=itemgetter(1))[0]
最后一行用它们的接近度值比较所有(节点,接近度)对,然后简单地将相关节点存储在变量中。
现在,如果您已经知道其他节点是'bad_apple_Bad_apple'
,那么您只需发出声明:
self.combined_network.add_edge(self.most_central_node, 'bad_apple_Bad_apple')
另请注意,您已在代码中访问了存储属性的词典:
network.graph
是存储图表属性的位置,例如name
。
network.node
是存储节点属性的地方,例如
network.node['bad_apple_Bad_apple']
将返回 dict
,其中包含属性及其值的名称。
您说您已多次阅读文档,但我强烈建议您浏览tutorial。