许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  呆萌的图模型学习:图基本信息与NetworkX基本操作(二)

呆萌的图模型学习:图基本信息与NetworkX基本操作(二)

阅读数 6
点赞 0
article_banner

Networkx是python常用的处理图模型的工具包,可以方便的处理图模型:

  • Github项目主页:https://github.com/networkx/networkx
  • 官网基本教程:https://networkx.org/documentation/stable/tutorial.html
  • Networkx文档:https://pelegm-networkx.readthedocs.io/en/latest/
  • Networkx v2.5中文文档:https://www.osgeo.cn/networkx/tutorial.html

下面是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("===============================================================")


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空