networkX-02-基础指标

news2024/11/26 20:50:12

文章目录

  • 1.度
    • 1.1 度
    • 1.2 入度
    • 1.3 出度
    • 1.4 加权度
    • 1.5 邻居节点
      • 1.5.1 邻居节点计算
      • 1.5.2 出度邻居节点
      • 1.5.3 入度邻居节点
  • 2.节点数、边数
  • 3.最短路径
    • 3.1 最短路径(不带权重)
    • 3.2 最短路径(带权重)
  • 4.计算图中所有的最短路径

教程仓库地址:github networkx_tutorial

import networkx as nx
import matplotlib.pyplot as plt
G_w = nx.DiGraph()
edges_list = [
    (1,2,1),
    (1,3,2),
    (1,4,3),
    (4,3,4)
]
G_w.add_weighted_edges_from(edges_list)
nx.draw_networkx(G = G_w)
list(G_w.edges(data=True))
[(1, 2, {'weight': 1}),
 (1, 3, {'weight': 2}),
 (1, 4, {'weight': 3}),
 (4, 3, {'weight': 4})]


png

#自定义可视化,在边上展示权重
edge_labels = nx.get_edge_attributes(G_w, "weight")
print('edge_labels:',edge_labels)
pos = nx.spring_layout(G_w) 
nx.draw_networkx_edge_labels(G_w, pos, edge_labels=edge_labels)  # 绘制图中边的权重
nx.draw_networkx(G_w, pos)
edge_labels: {(1, 2): 1, (1, 3): 2, (1, 4): 3, (4, 3): 4}

png

1.度

1.1 度

# 度
G = G_w.copy()
G.degree()
DiDegreeView({1: 3, 2: 1, 3: 2, 4: 2})

1.2 入度

# 入度
G.in_degree()
InDegreeView({1: 0, 2: 1, 3: 2, 4: 1})

1.3 出度

# 出度
G.out_degree()
OutDegreeView({1: 3, 2: 0, 3: 0, 4: 1})

1.4 加权度

  • 加权度

# 计算节点的加权度
G.degree(weight='weight')
DiDegreeView({1: 6, 2: 1, 3: 6, 4: 7})

1.5 邻居节点

  • 与一个给定节点通过一条边直接相连的所有节点。
  • 邻居节点
  • 出度邻居
  • 入度邻居

1.5.1 邻居节点计算

# 查找某个节点的邻居节点 (因为上面是有向图,G.neighbors()计算的是出度节点)
neighbors_of_1 = list(G.neighbors(1))
print("Neighbors of node 1:", neighbors_of_1)
Neighbors of node 1: [2, 3, 4]
# 计算并打印所有节点的邻居节点
for node in G.nodes():
    neighbors = list(G.neighbors(node))
    print(f"Neighbors of node {node}: {neighbors}")

Neighbors of node 1: [2, 3, 4]
Neighbors of node 2: []
Neighbors of node 3: []
Neighbors of node 4: [3]

1.5.2 出度邻居节点

# 找到节点1的出度邻居
out_neighbors_of_1 = list(G.successors(1))
print("Out-neighbors of node 1:", out_neighbors_of_1)
Out-neighbors of node 1: [2, 3, 4]
# 计算并打印所有节点的邻居节点
for node in G.nodes():
    neighbors = list(G.successors(node))
    print(f"Out-neighbors of node {node}: {neighbors}")

Out-neighbors of node 1: [2, 3, 4]
Out-neighbors of node 2: []
Out-neighbors of node 3: []
Out-neighbors of node 4: [3]

1.5.3 入度邻居节点

# 计算并打印所有节点的邻居节点
for node in G.nodes():
    neighbors = list(G.predecessors(node))
    print(f"In-neighbors of node {node}: {neighbors}")
In-neighbors of node 1: []
In-neighbors of node 2: [1]
In-neighbors of node 3: [1, 4]
In-neighbors of node 4: [1]

2.节点数、边数

# 节点的数量
nx.number_of_nodes(G=G)
4
# or
len(G)
4
nx.number_of_edges(G=G)
4

3.最短路径

  • shortest_path()
# 创建一个带权图
G = nx.Graph()
G.add_nodes_from([1, 2, 3, 4])

## 添加带权边
G.add_edge(1, 2, weight=0.5)
G.add_edge(2, 3, weight=0.3)
G.add_edge(3, 1, weight=0.1)
G.add_edge(4, 1, weight=0.1)
G.add_edge(4, 1, weight=0.2)

# 绘制图形
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_color='lightblue', node_size=500, font_size=16, font_weight='bold')
labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=labels, font_size=12, font_color='red')
plt.show()

# nx.to_numpy_matrix(G=G)


png

3.1 最短路径(不带权重)

  • 定义:两个节点之间的最短路径上的边数
  • source :起始节点
  • target :终止节点
  • weight : 边属性
G.edges(data=True)
EdgeDataView([(1, 2, {'weight': 0.5}), (1, 3, {'weight': 0.1}), (1, 4, {'weight': 0.2}), (2, 3, {'weight': 0.3})])
# 最短路径(不带权重)
nx.shortest_path(G=G,source=4,target=2,weight=None)
[4, 1, 2]
# 最短路径长度
nx.shortest_path_length(G=G,source=4,target=2,weight=None)
2

3.2 最短路径(带权重)

# 最短路径(带权重)
nx.shortest_path(G=G,source=4,target=2,weight='weight') 
[4, 1, 3, 2]
nx.shortest_path_length(G=G,source=4,target=2,weight='weight') 
0.6000000000000001

加权时的最短路径是4-1-2,从加权、非加权的最短路径可以看出,不路径长度为2;加权时为4-1-3-2,路径长度为:0.6

4.计算图中所有的最短路径

nx.shortest_path(G=G) # 无加权,所有节点之间的最短路径
{1: {1: [1], 2: [1, 2], 3: [1, 3], 4: [1, 4]},
 2: {2: [2], 1: [2, 1], 3: [2, 3], 4: [2, 1, 4]},
 3: {3: [3], 2: [3, 2], 1: [3, 1], 4: [3, 1, 4]},
 4: {4: [4], 1: [4, 1], 2: [4, 1, 2], 3: [4, 1, 3]}}
# 点-点对之间的最短路径
dict(nx.all_pairs_dijkstra_path(G=G,weight='weight'))
{1: {1: [1], 2: [1, 3, 2], 3: [1, 3], 4: [1, 4]},
 2: {2: [2], 1: [2, 3, 1], 3: [2, 3], 4: [2, 3, 1, 4]},
 3: {3: [3], 2: [3, 2], 1: [3, 1], 4: [3, 1, 4]},
 4: {4: [4], 1: [4, 1], 2: [4, 1, 3, 2], 3: [4, 1, 3]}}
# 点-点对之间的最短路径长度
dict(nx.all_pairs_dijkstra_path_length(G=G,weight='weight'))
{1: {1: 0, 3: 0.1, 4: 0.2, 2: 0.4},
 2: {2: 0, 3: 0.3, 1: 0.4, 4: 0.6000000000000001},
 3: {3: 0, 1: 0.1, 2: 0.3, 4: 0.30000000000000004},
 4: {4: 0, 1: 0.2, 3: 0.30000000000000004, 2: 0.6000000000000001}}
# 计算点-点对之间的最短路径和最短路径长度
dict(nx.all_pairs_dijkstra(G=G,weight='weight'))
{1: ({1: 0, 3: 0.1, 4: 0.2, 2: 0.4},
  {1: [1], 2: [1, 3, 2], 3: [1, 3], 4: [1, 4]}),
 2: ({2: 0, 3: 0.3, 1: 0.4, 4: 0.6000000000000001},
  {2: [2], 1: [2, 3, 1], 3: [2, 3], 4: [2, 3, 1, 4]}),
 3: ({3: 0, 1: 0.1, 2: 0.3, 4: 0.30000000000000004},
  {3: [3], 2: [3, 2], 1: [3, 1], 4: [3, 1, 4]}),
 4: ({4: 0, 1: 0.2, 3: 0.30000000000000004, 2: 0.6000000000000001},
  {4: [4], 1: [4, 1], 2: [4, 1, 3, 2], 3: [4, 1, 3]})}

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

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

相关文章

肖sir__设计测试用例方法之等价类02_(黑盒测试)

设计测试用例方法之等价类02_(黑盒测试) 一、掌握常用的设计方法: 黑盒测试方法:等价类、边界值,状态迁移法、场景法、判定表、因果图、正交表,(7种) 经验测试方法:错误推测法、异常…

file.raw和file在formdata中上传时遇到的坑!!

首先是这样,我在写一个表单上传页面的时候,结合elementeplus遇到了需要上传图片文件和视频文件的情况,一顿上网猛搜,经过一二十篇博客浏览下来,找到了三四篇可以参考,但是对于到底是上传file还是file.raw说…

通过ref 操作dom , 点击按钮后跳转到页面指定图片位置

滚动图片到视图 定义了一个名为 scrollToIndex 的函数,它接受一个参数 index。当按钮被点击时,这个函数会被调用,并根据传入的 index 值来滚动到对应的图片。 以 alt 来标记图片位置 alt“Tom” import { useRef } from "react";c…

【开发语言】C语言与Python的互操作详解

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

JDK8安装及系统变量配置(包含错误处理)

jdk安装 一.下载JDK二.安装三.配置系统变量四.可能遇到的问题1.显示已经安装的问题 或者 读取注册表项值失败2.原因3.解决 五.验证安装成功 一.下载JDK JDK下载官网 二.安装 双击之后,一直下一步就ok 三.配置系统变量 1.找到配置系统变量的地方 2.配置系统变…

[E2E Test] Python Behave Selenium 一文学会自动化测试

前言 本文将使用Python Behave与Selenium,和同学们一起认识自动化测试,并附上完整的实践教程。 项目源码已上传:CSDN 郭麻花 Azure Repo python-behave-selenium 核心概念 1. 什么是E2E Test E2E即End-to-end,意思是从头到尾…

Linux执行命令

命令格式 主命令 选项 参数(操作对象)例如: 修改主机名 hostname set-hostname 新名称显示/目录下的文件的详细信息 ls -l /命令 内置命令(builtin):shell程序自带的命令。 外部命令:有独立…

tensorRT从零起步高性能部署:课程总结

目录 前言1. cuda驱动API2. cuda运行时API3. tensorRT基础4. tensorRT高级5. tensorRT封装6. 自动驾驶案例项目总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍&…

1、Flutter移动端App实战教程【环境配置】

一、概述 Flutter是Google用以帮助开发者在IOS和Android 两个平台开发高质量原生UI的移动SDK,一份代码可以同时生成IOS和Android两个高性能、高保真的应用程序。 二、渲染机制 之所以说Flutter能够达到可以媲美甚至超越原生的体验,主要在于其拥有高性…

自然语言处理:提取长文本进行文本主要内容(文本意思)概括 (两种方法,但效果都一般)

本文主要针对长文本进行文本提取和中心思想概括&#xff0c;原文档放在了附件里面&#xff1a;<科大讯飞公告> -----------------------------------方法一&#xff1a;jieba分词提取文本&#xff08;句子赋分法&#xff09;------------------------- 1、首先导入相关…

docker笔记7:Docker微服务实战

1.通过IDEA新建一个普通微服务模块 建Module docker_boot 改POM <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…

【聚类】K-Means聚类

cluster&#xff1a;簇 原理&#xff1a; 这边暂时没有时间具体介绍kmeans聚类的原理。简单来说&#xff0c;就是首先初始化k个簇心&#xff1b;然后计算所有点到簇心的欧式距离&#xff0c;对一个点来说&#xff0c;距离最短就属于那个簇&#xff1b;然后更新不同簇的簇心&a…

nginx中模块的设置以及反向代理

nginx设置 nginx http 模块的配置文件位于 "/apps/nginx/conf/nginx.conf"&#xff08;以自己安装时选择的目录为准&#xff0c;若使用yum安装&#xff0c;则在 /etc/nginx/nginx.conf&#xff09;。在该文件中&#xff0c;需要定义一些常见的配置项&#xff0c;包括…

《Communicative Agents for Software Development》全文翻译

《Communicative Agents for Software Development》- 沟通性智能主体促进软件开发 论文信息Abstract1. Introduction2. CHATDEV2.1 聊天链2.2 设计2.3 编码2.4 测试2.5 记录 3. 实验4. 讨论5. 相关工作6. 结论 论文信息 题目&#xff1a;《Communicative Agents for Software…

TienChin 渠道管理-查看渠道接口

自定义 hasPermission 校验规则 自定义一个 Spring Security hasPermission 校验规则&#xff1a; 在 tienchin-framework 模块当中进行自定义&#xff0c;新建 CustomSecurityExpressionRoot.java 自定义 hasPermission 判断逻辑类&#xff1a; /*** author BNTang* version 1…

SSM框架-Spring框架核心知识梳理

目录 一、SpringIoC 1.1认识SpringIoC容器 1.2基于xml配置SpringIoC容器 1.3基于xml配置下Bean的生命周期和作用域 1.4 基于xml与注解配置SpringIoC容器 1.5 基于完全注解类配置SpringIoc容器 二、SpringAop面对切面编程 2.1认识SpringAop面向切面编程 2.2SpringAop基…

list【2】模拟实现(含迭代器实现超详解哦)

模拟实现list 引言&#xff08;实现概述&#xff09;list迭代器实现默认成员函数operator* 与 operator->operator 与 operator--operator 与 operator!迭代器实现概览 list主要接口实现默认成员函数构造函数析构函数赋值重载 迭代器容量元素访问数据修改inserterasepush_ba…

数学建模--二维插值函数模型的Python实现

目录 1.算法实现步骤 2.算法核心代码 3.算法效果展示 1.算法实现步骤 #二维插值函数的展示通过Axes3D函数来进行实现 #我们需要绘制出20*20的插值效果和500*500的插值效果,进行比较. 具体步骤如下所示: 1.将x-y分为20*20并且绘制网格图 2.进行20*20的插值计算并且绘制可视化图…

使用SimPowerSystems并网光伏阵列研究(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

9.4.tensorRT高级(4)封装系列-使用pybind11为python开发扩展模块

目录 前言1. pybind112. 补充知识2.1 pybind11 介绍 总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-使用p…