详细介绍 `networkx` 库,探讨它的基本功能、如何创建图、操作图以及其常用参数。

news2024/9/17 7:08:48

networkx

    • 什么是 NetworkX?
      • NetworkX 的安装
      • 基本概念
    • 如何使用 NetworkX 创建图?
      • 1. 创建无向图
      • 2. 创建有向图
      • 3. 创建加权图
      • 4. 从邻接矩阵创建图
    • 操作和分析图
      • 1. 获取节点和边
      • 2. 计算节点度数
      • 3. 计算路径和最短路径
      • 4. 图的可视化
    • `networkx` 的常用参数
      • 图对象的方法
      • 图算法
    • 总结

networkx 是一个用于创建、操作和研究复杂网络(图)的Python库,它为处理图结构提供了高效且简单的工具。networkx 被广泛应用于数据科学、社交网络分析、物流优化、科学计算等多个领域,特别适合处理各种有向图、无向图、加权图和多重图。


什么是 NetworkX?

networkx 是一个Python库,用于处理图的创建、操作和分析。图是一种数学结构,由节点(节点也称为顶点)和边(节点之间的连接)组成。在网络科学和数据分析中,图可以用来表示社交关系、通信网络、交通系统等各种实体和它们之间的关系。

NetworkX 的安装

可以通过 pip 来安装 networkx 库:

pip install networkx

基本概念

  1. 节点(Nodes):图的基本单位,表示实体或对象。
  2. 边(Edges):连接两个节点的线,表示它们之间的关系。

networkx 支持以下图的类型:

  • 无向图(Undirected Graph):节点之间的连接是双向的。
  • 有向图(Directed Graph):节点之间的连接是单向的。
  • 加权图(Weighted Graph):边具有权重,表示连接强度或距离等。
  • 多重图(MultiGraph 和 MultiDiGraph):允许在相同节点之间有多条边。

如何使用 NetworkX 创建图?

networkx 提供了多种方式来创建图,常见的有直接创建节点和边、从已有数据构建图、从图算法生成图等。下面介绍几种常见的图创建方法:

1. 创建无向图

import networkx as nx

# 创建一个空的无向图
G = nx.Graph()

# 添加节点
G.add_node(1)           # 添加单个节点
G.add_nodes_from([2, 3])  # 批量添加节点

# 添加边
G.add_edge(1, 2)         # 添加一条边
G.add_edges_from([(2, 3), (3, 1)])  # 批量添加边

# 查看节点和边
print("节点:", G.nodes())
print("边:", G.edges())

2. 创建有向图

# 创建一个有向图
DG = nx.DiGraph()

# 添加节点和边
DG.add_edges_from([(1, 2), (2, 3), (3, 1)])

# 打印有向图的节点和边
print("节点:", DG.nodes())
print("有向边:", DG.edges())

3. 创建加权图

# 创建一个加权无向图
WG = nx.Graph()

# 添加带权重的边
WG.add_edge(1, 2, weight=4.2)
WG.add_edge(2, 3, weight=3.1)

# 获取边的权重
print(WG[1][2]['weight'])

4. 从邻接矩阵创建图

import numpy as np

# 创建邻接矩阵
adj_matrix = np.array([[0, 1, 0],
                       [1, 0, 1],
                       [0, 1, 0]])

# 从邻接矩阵创建图
graph_from_matrix = nx.from_numpy_matrix(adj_matrix)
print(graph_from_matrix.edges())

操作和分析图

1. 获取节点和边

可以轻松地获取图中的节点和边:

nodes = G.nodes()
edges = G.edges()

print(f"图中的节点: {nodes}")
print(f"图中的边: {edges}")

2. 计算节点度数

节点的度数表示与该节点相连的边数。networkx 提供了 degree() 方法来计算每个节点的度数。

for node, degree in G.degree():
    print(f"节点 {node} 的度数为 {degree}")

3. 计算路径和最短路径

networkx 可以用于寻找图中的最短路径。例如,使用 shortest_path() 计算两节点之间的最短路径:

shortest_path = nx.shortest_path(G, source=1, target=3)
print(f"节点 1 到 3 的最短路径为: {shortest_path}")

4. 图的可视化

networkx 与 Matplotlib 结合,可以将图形可视化:

import matplotlib.pyplot as plt

# 绘制无向图
nx.draw(G, with_labels=True)
plt.show()

networkx 的常用参数

networkx 中,创建图时可以使用不同的图类型和图属性参数。例如,创建加权图时,可以给边指定权重;创建有向图时,可以指定边的方向。以下是常用的参数列表:

  1. weight:设置边的权重。
  2. directed:指定图是否为有向图。
  3. multigraph:是否允许在两个节点之间存在多条边。

图对象的方法

每种图类型(如 Graph, DiGraph, MultiGraph 等)提供了多种内置方法来操作图结构,比如:

  • add_node() / add_nodes_from():添加节点。
  • add_edge() / add_edges_from():添加边。
  • remove_node() / remove_nodes_from():移除节点。
  • remove_edge() / remove_edges_from():移除边。
  • degree():获取节点的度数。

图算法

networkx 提供了丰富的图算法来计算节点中心性、连通分量、最短路径等。

  • betweenness_centrality():计算节点的中介中心性。
  • clustering():计算集群系数。
  • connected_components():找出无向图中的连通分量。

总结

networkx 是一个功能强大的图处理库,能够轻松创建、操作和分析图结构。无论是简单的图创建还是复杂的图分析,networkx 都能为开发者提供高效的工具。通过 networkx,我们可以从社交网络、通信网络、物流网络等多种领域中,快速构建和处理图结构,分析图中的各种关系与特性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2116281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从路径优化学习FastPlanner之B样条曲线平滑(二):FastPlanner中B样条曲线代码理解与解读

参考别人的博客学习 根据之前一章只是大致了解了B样条数学原理,实际读代码还有疑惑。 控制点是什么?和规划出的路径点什么关系? 控制点可以说我们规划出的路径点,即n等于轨迹点个数。也可以不是轨迹点,通过线性方程反解…

Einsum(Einstein summation convention)

Einsum(Einstein summation convention) 笔记来源: Permute和Reshape嫌麻烦?einsum来帮忙! The Einstein summation convention is a notational shorthand used in tensor calculus, particularly in the fields of …

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链…

9.7(QT.Day 1)

一、自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面 要求&#xff1a;每行代码都有注释 【需要用到的图片或者动图&#xff0c;自己去网上找】 1.mywidget.h代码 #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> #include <QIcon> //图…

C++之格式化日期时间为字符串(精确到毫秒)

C11中提供了获取时间的chrono库&#xff0c;但是格式化显示太方便&#xff1b;C11还提供了格式化时间iomanip库&#xff0c;通过其put_time方法可以格式化时间到秒&#xff0c;要显示毫秒&#xff0c;就需要自己处理了。 #include <chrono> #include <string> #in…

css flex与inline-flex的区别

1、flex与inline-flex布局&#xff0c;都是弹性布局&#xff0c;盒状容器布局。 Flex 布局是什么&#xff1f;_w3cschool 2、下面一个实例来说明一下&#xff1a; 有一个要求&#xff0c;要求item增多的时候&#xff0c;不会换行&#xff0c;并且container容器也会随时item的…

【机器学习】我小学二年级妹妹都能理解的线性回归算法

什么是线性回归&#xff1f; 我小学二年级的妹妹想用压岁钱买房子&#xff0c;售楼广告上写着100万可以买100的房子&#xff0c;200万可以买200的房子&#xff0c;但是我的妹妹觉得那些房子都太小了&#xff0c;想买300的房子&#xff0c;那她应该要花多少钱呢&#xff1f; 对…

DBMS-2.2 数据库设计(2)——数据库规范化设计理论

本文章的素材与知识来自李国良老师和冠宇老师。 依赖理论 对于关系数据库中的依赖&#xff0c;分为函数依赖、多值依赖和连接依赖。 一.函数依赖 1.函数依赖 &#xff08;1&#xff09;定义&#xff1a; &#xff08;2&#xff09;理解&#xff1a; 通俗地讲&#xff0c;…

【Linux】借命令行参数的引导,探索环境变量的奥秘

目录 1.命令行参数 1.1.概念&#xff1a; 1.2.利用命令行参数打造计算器&#xff1a; 2.环境变量 2.1.环境变量是什么&#xff1f; 2.2.有什么方法可以不用带路径&#xff0c;直接就可以运行自己的程序呢&#xff1f; 法一&#xff1a; 法二&#xff1a; 2.3.通过代码…

PostgreSQL技术内幕9:PostgreSQL事务原理解析

文章目录 0.简介1.PG事务整体介绍1.1 事务类型介绍 1.2 事务模块介绍2. 代码分析 0.简介 有了上一篇数据库事务并发控制协议的介绍&#xff0c;对于数据库事务和并发控制有了基本的认识&#xff0c;本文将介绍PG事务模块&#xff0c;主要介绍PG支持的事务类型&#xff08;普通…

git为不同的项目设置不同的提交作者

方法1&#xff1a;找到项目的.git文件夹打开 打开config在下面添加自己作者信息 [user]name 作者名email 邮箱方法2&#xff1a;直接在.git文件夹设置作者名&#xff08;不使用–global参数&#xff09; git config user.name "xxxxx"如果想要修改之前提交的…

银行结算业务

1.1 银行本票 银行本票是由银行签发的,承诺自己在见票时无条件支付票款给收款人或持票人的业务。银行本票按票面划分为定额本票和不定额本票,按币种划分为人民币银行本票和外币银行本票。人民币银行本票仅在同一交换区域内使用,资金清算利用当地人民银行组织的资金清算形式…

vllm源码解析(五):LLM模型推理

八 模型推理细节探索 8.1 回顾下step的流程 def step(self) -> List[Union[RequestOutput, EmbeddingRequestOutput]]:# 多GPU并行推理时走AsyncLLMEngine分支。如果进入当前LLMEngine,性能会下降&#xff0c;这里会抛出异常。if self.parallel_config.pipeline_parallel_s…

基于机器学习的电商优惠券核销预测

1. 项目简介 随着移动互联网的快速发展&#xff0c;O2O&#xff08;Online to Offline&#xff09;模式已成为电商领域的一大亮点。优惠券作为一种有效的营销工具&#xff0c;被广泛应用于吸引新客户和激活老用户。然而&#xff0c;传统的随机投放方式往往效率低下&#xff0c;…

JavaWeb【day11】--(SpringBootWeb案例)

SpringBootWeb案例 前面我们已经实现了员工信息的条件分页查询以及删除操作。 关于员工管理的功能&#xff0c;还有两个需要实现&#xff1a; 新增员工 修改员工 首先我们先完成"新增员工"的功能开发&#xff0c;再完成"修改员工"的功能开发。而在&quo…

万能视频下载器-下载所有网站上的任何视频

万能视频下载器-下载所有网站上的任何视频 在Edge浏览器中发现了一款令人惊叹的视频下载扩展插件&#xff0c;简直就是视觉盛宴的利器&#xff01;只需轻点几下&#xff0c;在拓展商店中轻松查找并安装&#xff0c;你便能随时随地随心所欲地把心仪的视频收入囊中。无论是教学资…

matlab仿真 OFDM系统仿真

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第九章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; clear all N8;%子载波数 f1:N;%各个子载波频率 xrandi([0 3],1,N);%子载波上的数据 x1qammod(x,4);%4-QAM调制 t0:0.001:1-0.…

学习周报-2024.9.3

目录 摘要 Abstract 文献阅读&#xff1a;一种改善河流水质预测的耦合模型以解决非平稳性和数据限制 一、现有问题 二、提出方法 三、相关知识 1、基于小波分析的LSTM&#xff08;WA-LSTM&#xff09; 2、迁移学习TL改进WA-LSTM 四、WA-LSTM-TL模型 五、研究实验 1、…

手写NACOS的服务的注册与发现|心跳机制|轮询调用服务功能

背景 手写NACOS的服务的部分核心功能&#xff0c;提高自身的编码能力 本篇文章设计的是单体NACOS后端服务&#xff0c;提供SDK给多个NACOS客户端使用 本文编写了注册与发现|心跳机制|轮询调用服务功能&#xff0c;可当做入门级阅读 nacos-service 项目结构 代码内容 pom配置…

Detect It Easy

Detect It Easy&#xff08;简称 DIE&#xff09;项目的网址为 https://github.com/horsicq/Detect-It-Easy 下载完安装包后&#xff0c;直接双击die.exe即可进入到操作界面 工具介绍&#xff1a; 它可以用来检测程序架构和文件类型。如图所示。其中&#xff0c;「模式」说明程…