Rust 机器学习图形库 petgraph

一、介绍

Petgraph 是一个开源的图数据结构库,提供了非常丰富的图形类型和算法,并且支持将图形以 Graphviz 格式输出,还允许你为图的节点和边赋予任意类型的数据,从而能够灵活地处理和表示复杂的数据关系。

Petgraph 支持边的方向性,即用户可以创建有向图和无向图,以满足不同场景下的需求。可以说 Petgraph 为开发者提供了强大的工具,以便在软件工程、数据分析和科学计算等领域中有效地处理和分析图结构数据。

二、核心部分

数据结构:Petgraph 库提供了四种不同风格的图实现,每种都针对不同的应用需求进行了特别优化。这些图实现在功能和性能之间提供了多样化的选择,使得开发者可以根据自己的具体需求,如数据处理的复杂性或对性能的要求,来选择最合适的图结构。

图遍历算法:库中内置了深度优先遍历(DFS)和广度优先遍历(BFS)等基本图遍历算法。这些算法是图分析的基础,能够帮助开发者探索和理解图中的结构和关系,对于图的搜索和问题解决非常关键。

丰富的图算法:不仅提供了基础的图遍历功能,还有一系列常用的图算法,如寻找最短路径的寻路算法等。这些算法能够应用于多种场景,例如网络分析、交通网络规划和社交网络分析等,极大地扩展了图数据结构的应用范围。

三、安装

安装非常简单,运行这个命令即可:

cargo add petgraph

四、示例

1.例子1
我们试图创建了一个空的无向图 graph,然后添加了三个节点,并保存了它们的索引。接着添加了两条边,连接了这些节点。最后使用 node_indices() 和 edge_indices() 方法遍历图中的节点和边,并打印它们的信息。

use petgraph::graph::{Graph};fn main() {// 创建一个无向图let mut graph = Graph::<&str, &str>::new();// 添加节点并保存节点索引let a = graph.add_node("Node A");let b = graph.add_node("Node B");let c = graph.add_node("Node C");// 添加边graph.add_edge(a, b, "Edge AB");graph.add_edge(b, c, "Edge BC");// 遍历并打印图的节点和边for node in graph.node_indices() {println!("Node {}: {}", node.index(), graph[node]);}for edge in graph.edge_indices() {let (source, target) = graph.edge_endpoints(edge).unwrap();println!("Edge from {} to {}: {}",source.index(),target.index(),graph[edge]);}
}

在这里插入图片描述
这样就一个简单的 petgraph 库用法示例了,可以根据自己的需求来创建、修改和操作图,以满足不同的应用场景。
2.例子2
这个使用 Dijkstra 算法计算从图中的每个节点到其他节点的最短路径时,输出的结果包括了从每个节点到其他节点的最短路径和对应的权重。

use petgraph::graph::{Graph, NodeIndex};
use petgraph::algo;fn main() {// 创建一个有向图let mut graph = Graph::<(), i32>::new();// 添加节点并保存节点索引let nodes = graph.extend_with_edges(&[(0, 1), (0, 2), (0, 3), (1, 4), (1, 5), (2, 5), (2, 6), (3, 6), (4, 7), (5, 7), (6, 7)]);// 对每个节点执行 Dijkstra 算法,并打印结果for start in graph.node_indices() {println!("Shortest path from node {:?}", start.index());// 使用 Dijkstra 算法找到从起始节点到其他节点的最短路径let result = algo::dijkstra(&graph, start, None, |e| *e.weight());// 打印最短路径for (node, weight) in result {if weight < std::i32::MAX {println!("  -> Node {:?}, Weight: {:?}", node.index(), weight);} else {println!("  -> Node {:?}, Weight: Infinity", node.index());}}}
}

运行结果:
在这里插入图片描述
可以看到 petgraph 其实几乎满足我们大部分的的应用场景的,感兴趣可以去使用了。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【threejs】较大物体或shape的贴图较小问题处理方法

问题 有的场景内相对体型差距过大的物体&#xff08;如山地 海洋等&#xff09;由于尺寸问题&#xff0c;加载贴图过于小&#xff0c;同时shader也无法完全展示&#xff0c;如图 我们可以获取物体的uv&#xff0c;进行缩放使得贴图可以完全展开 如果uv是乱的 可以用xyz坐标最…

【新手适用】手把手教你从零开始实现一个基于Pytorch的卷积神经网络CNN二: 如何训练模型,内附详细损失、准确率、均值计算

手把手教你从零开始实现一个基于Pytorch的卷积神经网络CNN&#xff08;新手适用&#xff09;一&#xff1a; model.py&#xff1a;创建模块-CSDN博客 从零开始实现一个基于Pytorch的卷积神经网络 - 知乎 目录 1 设备device定义 2 训练模型定义 3 开始训练 3.1 step、batch…

使用filezilla连接Ubuntu22.04虚拟机

获取电脑IP和虚拟机IP ① 在windows下ctrlR再输入cmd&#xff0c;打开指令窗口&#xff0c;输入 ipconfig 虚拟机连接电脑用的是NAT模式&#xff0c;故看VMnet8的IP地址 ② 查看虚拟机IP地址 终端输入 ifconfig 如果没安装&#xff0c;按提示安装net-tools sudo apt install …

物联网学习2、MQTT 发布/订阅模式介绍

MQTT 发布/订阅模式 发布订阅模式&#xff08;Publish-Subscribe Pattern&#xff09;是一种消息传递模式&#xff0c;它将发送消息的客户端&#xff08;发布者&#xff09;与接收消息的客户端&#xff08;订阅者&#xff09;解耦&#xff0c;使得两者不需要建立直接的联系也不…

使用CMake搭建简单的Qt程序

目录结构 代码 CMakeLists.txt&#xff1a; cmake_minimum_required(VERSION 3.15)set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON)# set the project name project(xxx)# 设置Qt的路径 # 例如 E:/Qt/Qt/aaa/msvc2019_64 # aaa 为Qt的版本号 set(QT_PATH…

【工具-MATLAB】

MATLAB ■ MATLAB-简介■ MATLAB-应用领域■ MATLAB■ MATLAB■ MATLAB■ MATLAB ■ MATLAB-简介 MATLAB是matrix&laboratory两个词的组合&#xff0c;意为矩阵工厂&#xff08;矩阵实验室&#xff09; 美国MathWorks公司出品的商业数学软件, MATLAB和Mathematica、Maple并…

高风险IP来自哪里:探讨IP地址来源及其风险性质

在网络安全领域&#xff0c;高风险IP地址是指那些可能涉及恶意活动或网络攻击的IP地址。了解这些高风险IP地址的来源可以帮助网络管理员更好地识别和应对潜在的安全威胁。本文将探讨高风险IP地址的来源及其风险性质&#xff0c;并提供一些有效的应对措施。 风险IP查询&#xf…

物联网技术在数字化工厂中的应用研究——青创智通

工业物联网解决方案-工业IOT-青创智通 随着科技的不断进步和数字化浪潮的推动&#xff0c;物联网&#xff08;IoT&#xff09;技术在各个领域中得到了广泛应用。其中&#xff0c;数字化工厂作为现代制造业的重要代表&#xff0c;物联网技术的应用更是为其带来了革命性的变革。…

C# WPF编程-元素绑定

C# WPF编程-元素绑定 将元素绑定到一起绑定表达式绑定错误绑定模式代码创建绑定移除绑定使用代码检索绑定多绑定绑定更新绑定延时 数据绑定是一种关系&#xff0c;该关系告诉WPF从源对象提取一下信息&#xff0c;并用这些信息设置目标对象的属性。目标属性始终是依赖项属性&…

Centos7 elasticsearch-7.7.0 集群搭建,启用x-pack验证 Kibana7.4用户管理

前言 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心&#xff0c;它集中存储您的数据&#xff0c;帮助您发现意料之中以及意料之外的情况。 环境准备 软件 …

VSCode - 离线安装扩展python插件教程

1&#xff0c;下载插件 &#xff08;1&#xff09;首先使用浏览器打开 VSCode 插件市场link &#xff08;2&#xff09;进入插件主页&#xff0c;点击右侧的 Download Extension 链接&#xff0c;将离线安装包下载下来&#xff08;文件后缀为 .vsix&#xff09; 2&#xff0c;…

GoogleNet神经网络介绍

一、简介 GoogleNet&#xff0c;也称为GoogLeNet&#xff0c;是谷歌工程师设计的一种深度神经网络结构&#xff0c;它在2014年的ImageNet图像识别挑战赛中取得了冠军。该神经网络的设计特点主要体现在其深度和宽度上&#xff0c;通过引入名为Inception的核心子网络结构&#x…

HarmonyOS NEXT应用开发案例——阻塞事件冒泡

介绍 本示例主要介绍在点击事件中&#xff0c;子组件enabled属性设置为false的时候&#xff0c;如何解决点击子组件模块区域会触发父组件的点击事件问题&#xff1b;以及触摸事件中当子组件触发触摸事件的时候&#xff0c;父组件如果设置触摸事件的话&#xff0c;如何解决父组…

IDEA报错,`java.io.NotSerializableException`,解决:一个类只有实现了Serializable接口,它的对象才是可序列化的

问题&#xff1a;IDEA报错&#xff0c;java.io.NotSerializableException 解决办法&#xff1a;在出问题的类中加上implements Serializable&#xff0c;如下所示&#xff1a; 原因&#xff1a;当要将该实体类对象保存至某个地方时&#xff08;我这里是想将Catalog2Vo保存至R…

小型分布式文件存储系统GoFastDfs应用简介

前言 最近稍微留意了一下各个文件存储系统的协议&#xff0c;发现minio是LGPLV3, 而fastdfs 是GPL3,这些协议其实对于商业应用是一个大坑。故而寻找一些代替品。 go-fastdfs就是其中之一&#xff0c;官网在&#xff1a; go-fastdfs 具体应用 其实可以直接查看官网教程的。 下…

GEE:基于光谱距离方法的变化检测(以滑坡为例)

作者:CSDN @ _养乐多_ 本文将介绍在 Google Earth Engine(GEE)平台上,使用光谱向量距离度量方法进行变化检测的代码。代码中使用哨兵数据的光谱向量,并以检测滑坡为例进行演示。 结果如下图所示, 文章目录 一、参考内容1.1 光谱距离1.2 点积二、代码链接三、完整代码一…

python怎么处理txt

导入文件处理模块 import os 检测路径是否存在&#xff0c;存在则返回True&#xff0c;不存在则返回False os.path.exists("demo.txt") 如果你要创建一个文件并要写入内容 #如果demo.txt文件存在则会覆盖&#xff0c;并且demo.txt文件里面的内容被清空&#xff0c;如…

实现一个Google身份验证代替短信验证

最近才知道公司还在做国外的业务&#xff0c;要实现一个登陆辅助验证系统。咱们国内是用手机短信做验证&#xff0c;当然 这个google身份验证只是一个辅助验证登陆方式。看一下演示 看到了嘛。 手机下载一个谷歌身份验证器就可以 。 谷歌身份验证器&#xff0c;我本身是一个基…

每天五分钟深度学习:神经网络和深度学习有什么样的关系?

本文重点 神经网络是一种模拟人脑神经元连接方式的计算模型&#xff0c;通过大量神经元之间的连接和权重调整&#xff0c;实现对输入数据的处理和分析。而深度学习则是神经网络的一种特殊形式&#xff0c;它通过构建深层次的神经网络结构&#xff0c;实现对复杂数据的深度学习…

python爬虫----了解爬虫(十一天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…