如何解决如何从networkx中的图形中删除float'nan'节点?
我有一个包含float('nan')
的数据集(腌制格式),我需要将其删除。
可以将float('nan')
添加到图作为networkx中的节点。但是,我不知道如何删除它。
import networkx as nx
G = nx.Graph()
G.add_node(float('nan'))
print(G.nodes) # [nan],so there is float('nan') in the graph
G.remove_node(float('nan')) # this statement raise a NetworkxError showing nan not in the graph
CoReRank-WSDM-2019和BirdNest中的代码和数据。
有人可以帮助我解决这个问题吗?预先谢谢你。
解决方法
我们可以在一个简单的字典上对此进行测试,该字典是NetworkX图的基础数据结构。说你有:
d = {'a':3,float('nan'):4}
如果您尝试这样做,则尝试访问NaN
键:
d[float('nan')]
> KeyError: nan
造成这种情况的主要原因是NaN
不等于自身:
>>> float("nan") == float("nan")
False
here很好地解释了导致查找失败的原因。
一种解决方法是,遍历图形键,并确定NaN
节点,然后然后使用对象的相同引用删除该键:
import math
G = nx.Graph()
G.add_node(float('nan'))
G.add_node(3)
print(G.nodes)
# [nan,3]
nan_nodes = []
for node in G.nodes():
if math.isnan(node):
nan_nodes.append(node)
G.remove_nodes_from(nan_nodes)
G.nodes()
# NodeView((3,))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。