Networkx是python常用的处理图模型的工具包,可以方便的处理图模型:
下面是Networkx中对图的一些基本操作,包括:
import matplotlib.pyplot as plt
import networkx as nx # 导入包
import numpy as np
def generate_network():
"""构建图的操作"""
# 构建一个图,包括三个群落,分别包裹5,12,13个节点
gen_network: nx.Graph = nx.generators.community.random_partition_graph([5, 12, 13], .25, .1, seed=0)
# 更多生成图的操作可以参考:https://networkx.org/documentation/stable/reference/generators.html
# 增
gen_network.add_node(1, feature_1='a', feature_2='b') # 为节点1添加2个特征
gen_network.add_node(31, feature_1='c') # 添加节点31并增加1个特征
gen_network.add_edge(1, 31) # 增加1条边:1-31
gen_network.add_edges_from([(2, 31), (3, 31)]) # 批量增加多个边
# 删
# gen_network.remove_node(10) # 删除单个节点
# gen_network.remove_nodes_from([11, 13]) # 删除多个节点
# gen_network.remove_edge(2, 31) # 删除单条边
# gen_network.remove_edges_from([(3, 31)]) # 删除多条边
# 改(一般是点、边的属性)
gen_network.nodes[1].update({"feature_1": "A", "feature_2": "B"})
# 绘制图像
nx.draw_networkx(gen_network, with_labels=True)
plt.show()
return gen_network
if __name__ == '__main__':
graph = generate_network()
print("===============================================================")
# networkx图基本信息
print("图的基本信息", nx.info(graph))
print("点的数量:", graph.number_of_nodes())
print("边的数量:", graph.number_of_edges())
print("图的直径:", nx.diameter(graph))
print("图的平均最短路径:", nx.average_shortest_path_length(graph))
print("===============================================================")
# 节点基本信息
print("所有节点信息:", graph.nodes(data=True)) # 每个节点都有一个id,用于标识节点
print("所有边的信息:", graph.edges(data=True)) # 每个边是用两个节点的id表示,networkx不允许出现平行边(两个节点多条边)
print("节点id为0的属性:", graph.nodes[1])
print("节点id为1的度:", graph.degree[3])
print("节点id为1的邻居:", list(graph.neighbors(1)))
# np.array(nx.adjacency_matrix(G).todense()) # 邻接矩阵
# 全图信息
print("图遍历:", list(graph.adjacency()))
print("包含属性feature_1的全部节点", nx.get_node_attributes(graph, "feature_1"))
print("邻接图见下方程序\n")
adjacency_graph_1 = np.array(nx.adjacency_matrix(graph).todense())
adjacency_graph_2 = np.array(nx.to_numpy_matrix(graph))
print("邻接表见下方程序")
adjacency_table = list(nx.generate_adjlist(graph))
print("===============================================================")
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删