诸神缄默不语-个人CSDN博文目录

NetworkX是复杂网络研究领域中的常用Python包。本文旨在通过介绍NetworkX中常用的方法等内容,为新手提供一个NetworkX的入门教程。
官方文档地址

文章目录

  • 1. Graph Types
  • 2. 图数据的创建、属性与常用方法
  • 3. 除文中已列出的NetworkX官方文档外,其他使用到的参考资料

1. Graph Types

Graph Types文档

允许以可哈希的object作为节点,任何Python object作为边属性。

如何选择使用哪种图:

2. 图数据的创建、属性与常用方法

Graph文档

  1. 创建一个空的图

    1. 无向图:G = nx.Graph()
    2. 有向图:DG = nx.DiGraph()
  2. 将有向图转换为无向图:G = nx.Graph(DG)
  3. 图是否有向:G.is_directed() 返回布尔值
  4. 添加节点
    1. 直接添加一个节点(任何object都可以作为节点,包括另一个图)G.add_node(1)G.add_node(DG)
    2. 从任何容器加点:a list, dict, set or even the lines from a file or the nodes from another graph
      G.add_nodes_from()nx.path_graph() path_graph()文档(相当于生成一条线)

添加节点 示例代码:

G.add_nodes_from([2, 3])
G.add_nodes_from(range(100, 110))
H = nx.path_graph(10)
G.add_nodes_from(H)
G.add_node('spam')       # adds node "spam"
G.add_nodes_from('spam') # adds 4 nodes: 's', 'p', 'a', 'm'
  1. 添加边

    1. 添加一条边 G.add_edge(u, v)
    2. 添加一个边的列表 G.add_edges_from([(1, 2), (1, 3)])
    3. 添加一个边的collection G.add_edges_from(H.edges)
    4. 如果添加的边的点不存在于图中,会自动添上相应节点而不报错
  2. 属性attribute
    1. 图的节点/边/图都可以在关联的attribute字典中以键值对key/value形式存储attribute(key一定要是可哈希的)
    2. 默认情况下属性字典是空的
    3. 可以通过 add_edge()add_node() 方法或直接操作分别名为graph edges nodes的属性字典来进行操作

示例代码:图
创建带属性的图

G = nx.Graph(day="Friday")
G.graph  #输出:{'day': 'Friday'}

为图赋属性(也是修改属性的方法)

G = nx.Graph()
G.graph["Name"] = "Bar"
print(G.graph)  #输出:{'Name': 'Bar'}

示例代码:节点
创建含属性的节点,为节点赋属性、删除节点属性,迭代输出节点及其属性数据

G.add_node(1, time="5pm")
G.add_nodes_from([3], time="2pm")
G.nodes[1]  #输出:{'time': '5pm'}G.nodes[1]["room"] = 714  # node must exist already to use G.nodes
del G.nodes[1]["room"]  # remove attribute
list(G.nodes(data=True))  #输出:[(1, {'time': '5pm'}), (3, {'time': '2pm'})]
list(G)  #G也可以作为G节点的迭代器

添加多个带属性节点

# Add multiple nodes with attributes
G.add_nodes_from([(1, {"feature": 1, "label": 1}),(2, {"feature": 2, "label": 2})
])

示例代码:边
添加带属性的边,添加多个带属性的边,为边的属性赋值,迭代输出边及其属性数据

G.add_edge(1, 2, weight=4.7)
G.add_edges_from([(3, 4), (4, 5)], color="red")
G.add_edges_from([(1, 2, {"color": "blue"}), (2, 3, {"weight": 8})])
G[1][2]["weight"] = 4.7
G.edges[1, 2]["weight"] = 4
G.edges[(1, 2)]["weight"] = 4
list(G.edges(data=True))  #跟上面的G.nodes()类似

注意:G.edges属性是只读的,但是可以更改类似G.edges[1, 2]这种object里的属性,举例:G.edges[1, 2]['weight'] = 4
(对multigraph:MG.edges[u, v, key][name] = value

添加含weight属性的边 add_weighted_edges_from()函数文档

G.add_weighted_edges_from([(0, 1, 3.0), (1, 2, 7.5)])

注意:如果在Graph/DiGraph中添加两次相同的边会仅更新weight;如果在MultiGraph/MultiDiGraph中则会储存多此边

  1. 兼容Python语法的捷径

示例代码:

1 in G  # check if node in graph
[n for n in G if n < 3]  # iterate through nodes
len(G)  # number of nodes in graph
  1. 节点数量 G.number_of_nodes()
    边数量 G.number_of_edges()
  2. 可视化 nx.draw(G, with_labels = True)
  3. 节点特征
    1. 度数:G.degree[node_id]G.out_degree(node_id)G.in_degree(node_id)
      可选参数:weight
    2. 邻居:
      1. 无向图:G.neighbors(node_id) 返回迭代器
      2. 有向图:
        1. G.successors(node_id)(node_id指向的节点)
        2. G.predecessors(node_id)(指向node_id的节点)
      3. 另一种访问邻居的方式是通过G.adj(adjacency list,详情见后文)
        G[node_id]
        G.adj[node_id]
    3. PageRank:nx.pagerank(G) 返回PageRank向量 pagerank()文档
  4. 删除数据
    1. 删除节点:G.remove_node(n)
    2. 删除所有节点和边:G.clear()
  5. 图表示
    1. adjacency list

      1. G.adj
        返回值示例:AdjacencyView({1: {2: {'weight': 0.125}, 3: {'weight': 0.75}}, 2: {1: {'weight': 0.125}, 4: {'weight': 1.2}}, 3: {1: {'weight': 0.75}, 4: {'weight': 0.375}}, 4: {2: {'weight': 1.2}, 3: {'weight': 0.375}}})
      2. G.adjacency()
        返回一个迭代器,每个元素示例格式:(1, {2: {'weight': 0.125}, 3: {'weight': 0.75}})
      3. 用类似 G[1] 的方法也可以访问(相当于 G.adj[1]),返回值示例:AtlasView({2: {'weight': 0.125}, 3: {'weight': 0.75}})

3. 除文中已列出的NetworkX官方文档外,其他使用到的参考资料

  1. cs224w课程的colab0

    1. 原始文件下载地址
    2. 我上传到GitHub的文件网址,已添加过部分私人注释
  2. cs224w课程的colab0的参考文件
    1. 原始文件下载地址 有过时语法
    2. 我把这个文件代码改了后跑通了,放到了Google Drive上公开。可以上的如需可资借鉴:“NetworkX.ipynb”的副本 但是没什么新东西,所以下不了也无所谓,我就不放在GitHub之类更容易登入的地方了。如需找我。

NetworkX入门教程相关推荐

  1. NetworkX入门及实战教程

    NetworkX入门及实战教程 环境要求和工具包安装 自带图的绘制 连接表和邻接表创建图 通过连接表edge list创建图 可视化 查看全图参数 保存并载入邻接表 用NetworkX创建图 创建空图 ...

  2. [carla入门教程]-5 使用ROS与carla通信

    本专栏教程将记录从安装carla到调用carla的pythonAPI进行车辆操控并采集数据的全流程,带领大家从安装carla开始,到最终能够熟练使用carla仿真环境进行传感器数据采集和车辆控制. 第 ...

  3. Kafka入门教程与详解

    1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件负责处理连接服务.消息的路由和传送.持久 ...

  4. 【CV】Pytorch一小时入门教程-代码详解

    目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...

  5. python tornado教程_Tornado 简单入门教程(零)——准备工作

    前言: 这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端).学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考.完 ...

  6. python向量计算库教程_NumPy库入门教程:基础知识总结

    原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...

  7. mysql query browswer_MySQL数据库新特性之存储过程入门教程

    MySQL数据库新特性之存储过程入门教程 在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用 ...

  8. python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 TensorFlow入门教程 TensorFlow 基本使用 TensorFlow官方中文教程 TensorFlow 的特点: 使用图 (graph) 来 ...

  9. air调用java,AIR2.0入门教程:与Java应用交互

    在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++ 的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的 ...

最新文章

  1. .net ConfigurationSectionDesigner插件使用
  2. TensorFlow Lattice:灵活、可控、可解释的机器学习
  3. verdi bin工具
  4. 代码Review发现问题
  5. 如何在Spring 3.x中使用事件
  6. 域控服务器取消验证_记一次域控服务器应急
  7. IDEA : IDEA好用的插件集锦
  8. 易语言下载别人的源码编译出来用不了_我是如何阅读源码的
  9. mysql ssd优化测试_MySQL服务器SSD性能问题分析与测试
  10. 直观理解Hilbert空间是什么?
  11. 一般线性模型和混合线性模型_从零开始的线性混合模型
  12. Codeforces 1253B Silly Mistake
  13. android qq语音按钮,qq语音设置怎么操作?手机qq语音设置在哪里
  14. 常用遥感SIF和GPP数据集
  15. 添加用户并赋予 root管理员权限
  16. 【leetcode】1419. Minimum Number of Frogs Croaking
  17. vs添加监视快捷键_询问操作方法:监视Android移动设备使用情况,Windows键盘快捷键和修复损坏的照片...
  18. 航天环宇提交招股书上会稿:计划募资6亿元,控股股东为李完小
  19. 游戏版号拿到了,可公司破产了
  20. 二维我的世界Dev c++代码

热门文章

  1. java连接数据库打印输出中文显示乱码
  2. 故障:启动修复无法修复你的电脑
  3. 杨森翔书法;腊八习字
  4. 再不懂时序就 OUT 啦!,DBengine 排名第一时序数据库,阿里云数据库 InfluxDB 正式商业化!...
  5. Go语言Web开发Echo框架搭建
  6. DeFi+NFT+实体藏品创新融合构建OPENLAND生态圈
  7. 心疼小哥1万秒 | “人到货”VS“货到人”|拆零拣选
  8. 关于Kubernetes中kube-scheduler的一些笔记
  9. Yarn的调度器--Scheduler探究
  10. MySQL常见面试笔试题