SciPy CSGraph - 压缩稀疏图2024年8月29日 | 阅读 7 分钟 在计算机科学、社交网络、交通系统等许多学科中,图是描述项之间关系的强大数学结构。图分析和计算等许多应用中的一项基本活动可能具有挑战性,尤其是在处理具有稀疏连接的大型网络时。幸运的是,Python SciPy 库的 scipy.sparse.csgraph 子包提供了一套完整的工具和技术,用于利用稀疏矩阵表示进行实际的图分析。稀疏矩阵的大多数组件都是零,这使其非常适合表示和修改具有稀疏连通性的庞大数据集。 压缩稀疏图 (csgraph) 模块是 Python SciPy 库提供的多个科学计算模块之一。SciPy 的 csgraph 模块用于处理编码为稀疏矩阵的图。 稀疏矩阵可以有效地存储具有相当比例的零元素的が矩阵。由于它们只存储非零元素及其位置,因此表示矩阵所需的内存会减少。这在使用具有许多比可行边更多的边的庞大图时非常有用。 csgraph 模块提供了对稀疏图高效执行各种图相关任务的方法。其中最常见的是最短路径、连通分量、聚类系数等。 要使用 csgraph 模块,您需要从 SciPy 库导入它 导入模块后,您可以使用其函数来修改您的图。例如,shortest_path 函数可用于确定图中任意两个节点之间的最短路径 输出 Shortest distances between nodes: [[0. 1. 2.] [1. 0. 1.] [2. 1. 0.]] Shortest path from node 0 to node 2: [0 1 2] 在上面的示例中,shortest_path 函数确定节点 0 和节点 2 之间的最短路径。通过 return_predecessors=True 选项检索前驱矩阵,然后使用该信息重建实际路径。shortest_path 变量包含从节点 0 到节点 2 的最短路径上的节点,而 distances 数组包含从节点 0 到所有其他节点的最短距离。 使用 SciPy csgraph 模块的几个附加用例 计算连通分量输出 Number of connected components: 1 Component labels: [0 0 0] connected_components 函数确定图中连通分量的数量,并为每个节点分配一个标签,以指示它是否属于某个连通分量。 查找强连通分量输出 Number of strongly connected components: 2 Component labels: [0 0 1 1] 使用 Dijkstra 算法计算最短路径输出 Shortest distances from the starting node: [0. 2. 3.] Predecessors along the shortest paths: [-9999 0 1] 此代码使用权重矩阵构造一个稀疏加权图。weight_matrix 变量表示图中节点之间的权重或距离。 然后,通过 csgraph.dijkstra 函数使用 Dijkstra 方法确定从起始节点到图中每个其他节点的最短路径。通过指定 return_predecessors=True 参数,可以获取前驱矩阵,该矩阵记录到每个节点的最短路径上的前一个节点。 shortest_distances 变量包含前驱矩阵,而 predecessor 变量包含从起始节点到所有其他节点计算出的最短距离。 然后将最短路径和长度打印到控制台,然后是这些路径上的前驱节点。 查找最小生成树输出 Minimum spanning tree: [[0. 2. 0. 0.] [2. 0. 3. 0.] [0. 3. 0. 0.] [0. 0. 0. 0.]] minimum_spanning_tree 函数确定加权图的最小生成树。结果树由稀疏矩阵表示。 计算中间中心性输出 Betweenness centrality: [0. 0. 0.] 在无权网络中,betweenness_centrality 函数计算每个节点的中间中心性。它通过穿过节点的最短路径数量来衡量节点的重要性。 聚类系数输出 Clustering coefficient: [0.33333333 0.33333333 0.33333333 0.] 在无权网络中,clustering 函数确定每个节点的聚类系数。它测量节点聚集的紧密程度。 拉普拉斯矩阵和谱聚类输出 Cluster labels: [0 1 0] 在此示例中,Laplacian 函数用于构造加权图的拉普拉斯矩阵。通过 spectral_clustering 函数对拉普拉斯矩阵进行谱聚类,该函数根据节点的连接模式对其进行标记。 深度优先搜索输出 Depth-first search order: [0 1 2] 使用特定节点作为起点,depth_first_order 函数在无权图上执行深度优先搜索。它返回访问节点的顺序。 广度优先搜索输出 Breadth-first search order: [0 1 2] 使用特定节点作为起点,breadth_first_order 函数在无权图上执行广度优先搜索。它返回访问节点的顺序。 图表示: csgraph 模块支持各种图表示,包括邻接矩阵、关联矩阵和拉普拉斯矩阵。csgraph_from_dense、csgraph_from_masked 和 laplacian 函数允许您在各种图表示之间切换。 图算法: csgraph 模块包含几种图算法,例如最短路径算法(Dijkstra 算法和 Bellman-Ford 算法)、最大流技术(Edmonds-Karp 算法)以及用于最小生成树的 Kruskal 算法。这些算法被设计为与稀疏图表示一起高效运行。 图属性: csgraph 模块可用于确定各种图属性。您可以确定网络中节点的度、邻近度和特征向量中心性。您还可以使用该模块计算图的直径和半径。 图连通性: csgraph 模块提供了一些与连通性相关的能力,例如查找有向图和无向图中的连通分量、强连通分量和弱连通分量。 图可视化: csgraph 模块不提供图可视化功能,因为它专注于图算法和计算。请考虑使用 NetworkX 或 Graph-tool 等其他库进行图可视化,以及 SciPy。 性能考虑: csgraph 模块旨在高效处理大型稀疏图。通过使用稀疏矩阵表示和优化的算法,它可以有效地处理具有数百万个节点和边的网络,同时消耗最少的内存。 |
二项式分布是概率论和统计学中的一个关键概念。它解释了在一定数量的独立伯努利试验中获得特定成功次数的可能性,其中每个试验只能导致成功或失败。以下是二项式分布的主要特征:固定...
阅读 3 分钟
像Python这样的编程语言包含不同的库集来执行内存分析。这类库的例子可以是memory_profiler、guppy/heapy、scalene等。所有这些库都通过Python代码以多种方式提供内存使用情况。然而,没有提供监控内存的规定...
58分钟阅读
在本教程中,我们将讨论如何使用 Python 中的 geopy 模块获取特定位置的邮政编码。geopy 使 Python 用户可以轻松地定位全球地址、城市和国家的坐标。要安装...
阅读 3 分钟
1. Python 金融投资基础 [Udemy] 通过这个 Python 金融 Udemy 课程开启您的职业生涯。您将成为使用 Python 语言进行金融分析的专家。这是一门有趣的课程,可以理解 Python 如何用于处理金融计算和股票投资组合...
阅读 8 分钟
? Python 简介 Python 是一种灵活且广泛使用的编程语言,它提供了许多支持其执行的实现。其中,CPython 仍然是最著名且最广泛使用的实现。作为 Python 的默认解释器,CPython 在执行 Python 代码和提供基础方面发挥着关键作用...
阅读 6 分钟
Kivy 是 Python 中的图形用户界面工具,它是平台独立的。使用 Kivy 开发的应用程序可以在 IOS、Windows、Linux 和 Android 操作系统上使用。Kivy 工具的基本用途是开发 Android 操作系统的应用程序,但它...
阅读 6 分钟
构建一个组织目录中文件的 Python 程序的通用过程如下: 1. 识别目录 - 您必须找到要组织的源目录。请务必注意该目录中包含的文件。这些文件可以是...
7 分钟阅读
在 Python 中,字符串是字符序列,列表是元素的集合,可以是任何数据类型,包括字符串。字符串列表的减法涉及删除两个列表或字符串之间共有的元素。要减去一个字符串列表...
阅读 4 分钟
在本教程中,我们将学习使用 pdb 的 Python 调试工具。当开发者在时间紧迫的情况下忙于工作并希望它能正常工作时,调试应用程序是不受欢迎的活动。我们将展示使用 pdb 的基础知识,这是 Python 的交互式...
阅读 8 分钟
?如果你渴望在机器学习领域获得成功的职业生涯,让我们向你介绍另一个有趣的包,它的功能会让你惊叹不已。那么,让我们看看 statsmodels 是什么以及它有哪些功能?Statsmodels 是 Python 中一个流行的库,它使得...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India