You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于CSV文件批量计算图中节点间的共同邻居?

问题分析与解决方案

你的代码存在三个核心问题,导致无法正确计算所有节点对的共同邻居:

  1. 节点读取错误:G.add_nodes_from("n")是将字符串"n"拆分为单个字符('n')添加为节点,而非读取CSV文件里的实际节点数据。
  2. 边读取错误:G.add_edges_from([("u","v")])仅添加了一条名为"u"和"v"的节点间的边,没有导入CSV中的真实边数据。
  3. 未遍历所有节点对:仅针对不存在的节点对("u","v")计算共同邻居,没有覆盖所有需要计算的节点组合。

修正后的完整代码

import networkx as nx
import pandas as pd
from itertools import combinations

# 读取CSV数据
nodes_df = pd.read_csv("vectorcornell.csv", names=["n"])
edges_df = pd.read_csv("edgescornell.csv", names=["u", "v"])

# 构建图结构
G = nx.Graph()
# 从CSV的节点列添加所有节点
G.add_nodes_from(nodes_df["n"].tolist())
# 将边数据转换为元组列表后添加
edges = edges_df.apply(tuple, axis=1).tolist()
G.add_edges_from(edges)

# 计算所有无序节点对的共同邻居
# 使用combinations生成不重复的节点对
for node1, node2 in combinations(G.nodes(), 2):
    common_neighbors = list(nx.common_neighbors(G, node1, node2))
    # 可以选择只输出有共同邻居的节点对,避免空结果刷屏
    if common_neighbors:
        print(f"节点{node1}和{node2}的共同邻居: {common_neighbors}")

# 绘制图(可选,数据量大时不建议,会很拥挤)
import matplotlib.pyplot as plt
nx.draw(G, with_labels=True)
plt.show()

关键修正说明

  • 节点导入:nodes_df["n"].tolist()将CSV中存储的所有节点编号转换为列表,正确添加到图中。
  • 边导入:edges_df.apply(tuple, axis=1).tolist()把CSV的每一行边数据转换为元组(比如(节点A, 节点B)),批量添加到图中。
  • 遍历所有节点对:combinations(G.nodes(), 2)生成所有不重复的无序节点对,确保每对节点只计算一次共同邻居。如果只需要计算有边相连的节点对,可以替换为G.edges()。

内容的提问来源于stack exchange,提问作者raghad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:25:22