如何从 networkx 中的图形中删除 float('nan') 节点?
How to remove float('nan') node from a graph in networkx?
我有一个包含 float('nan')
的数据集(pickle 格式),我需要将其删除。
可以将 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 and 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,))
我有一个包含 float('nan')
的数据集(pickle 格式),我需要将其删除。
可以将 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 and 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,))