求助:Networkx的max_flow_min_cost结果导出CSV格式异常
解决NetworkX max_flow_min_cost结果导出问题
问题出在max_flow_min_cost返回的残差图中,流量数据存储在边的flow属性里,但默认的write_edgelist不会自动提取这个属性,只会输出节点对和空的属性字典(也就是你看到的{})。
解决步骤
1. 确认残差图的流量属性
调用max_flow_min_cost时,第二个返回值是残差网络,每条边的flow字段记录了实际流量:
from networkx.algorithms.flow import max_flow_min_cost # 假设G是你的原始图,已设置capacity和cost属性 flow_total, residual_graph = max_flow_min_cost(G, source_node, sink_node)
2. 正确导出流量数据
如果你想直接用write_edgelist导出,需要显式指定要导出的flow属性:
# 导出为带flow属性的格式,每行是 节点1 节点2 {'flow': 流量值} nx.write_edgelist(residual_graph, 'flow_output.csv', data=['flow'])
如果需要纯数值格式(比如2 4 8),建议手动遍历边并写入CSV,避免默认的字典格式:
import csv with open('clean_flow_output.csv', 'w', newline='') as csvfile: writer = csv.writer(csvfile, delimiter=' ') # 遍历所有边,只导出流量大于0的有效边(可选过滤) for u, v, edge_attrs in residual_graph.edges(data=True): flow = edge_attrs.get('flow', 0) if flow > 0: writer.writerow([u, v, flow])
这样就能得到你预期的节点1 节点2 流量值格式的输出了。
内容的提问来源于stack exchange,提问作者Chris66
相关产品推荐
相关产品推荐

