如何基于Jaccard距离矩阵(阈值0.5)构建NetworkX图
基于Jaccard距离矩阵构建NetworkX图
需求说明
我们有观测值的Jaccard距离对角矩阵,要构建NetworkX图,规则是仅当两个节点的Jaccard距离大于0.5时,在它们之间添加边。比如给定示例矩阵:
A, B, CA 1 0.4 0.7
B 0.4 1 0.6
C 0.7 0.6 1
最终图里的边应为:A-C、B-C。
实现步骤
先导入依赖库:
import networkx as nx import pandas as pd定义节点和距离矩阵:
用DataFrame存储矩阵,方便对应节点名称:# 节点列表 nodes = ["A", "B", "C"] # 距离矩阵数据 distance_data = [ [1, 0.4, 0.7], [0.4, 1, 0.6], [0.7, 0.6, 1] ] # 转为DataFrame,索引和列名对应节点 df = pd.DataFrame(distance_data, index=nodes, columns=nodes)创建图并添加符合条件的边:
# 初始化无向图 G = nx.Graph() # 添加所有节点 G.add_nodes_from(nodes) # 遍历节点对(避免重复处理A-B和B-A) for i in range(len(nodes)): for j in range(i+1, len(nodes)): node1 = nodes[i] node2 = nodes[j] # 获取两个节点的Jaccard距离 dist = df.loc[node1, node2] # 满足条件则添加边 if dist > 0.5: G.add_edge(node1, node2)验证结果:
打印边列表确认是否符合预期:print("图中的边:", list(G.edges())) # 输出应为:图中的边: [('A', 'C'), ('B', 'C')]可选:可视化图
如需直观查看结构,可用NetworkX绘图功能:import matplotlib.pyplot as plt nx.draw(G, with_labels=True, node_size=1500, font_size=12) plt.show()
内容的提问来源于stack exchange,提问作者Solomon123
相关产品推荐
相关产品推荐

