图表

收藏793

阅读2426

更新时间2025-08-14

使用图

图是基本的数据结构。

SciPy 提供了 scipy.sparse.csgraph 模块来处理此类数据结构。

邻接矩阵

邻接矩阵是一个 nxn 矩阵,其中 n 是图中元素的数量。

值表示元素之间的联系。

例如:

对于具有元素 A、B 和 C 的图,连接是:

A 和 B 之间的权重为 1。

A 和 C 之间的权重为 2。

C 和 B 之间没有连接。

邻接矩阵将如下所示:

  A B C
A:[0 1 2]  
B:[1 0 0]
C:[2 0 0]

下面是使用邻接矩阵的一些最常用的方法。

连通分量

使用 connected_components() 方法查找所有连通分量。

实例

import numpy as np
from scipy.sparse.csgraph import connected_components
from scipy.sparse import csr_matrix

arr = np.array([
  [0, 1, 2],
  [1, 0, 0],
  [2, 0, 0]
])

newarr = csr_matrix(arr)

print(connected_components(newarr))

Dijkstra

使用 dijkstra 方法在图中查找从一个元素到另一个元素的最短路径。

它接受以下参数:

  1. return_predecessors: 布尔值(如果为 True,则返回遍历的完整路径,否则为 False)。
  2. indices: 仅返回从该元素的所有路径的索引。
  3. limit: 路径的最大权重。

实例

求从元素 1 到元素 2 的最短路径:

import numpy as np
from scipy.sparse.csgraph import dijkstra
from scipy.sparse import csr_matrix

arr = np.array([
  [0, 1, 2],
  [1, 0, 0],
  [2, 0, 0]
])

newarr = csr_matrix(arr)

print(dijkstra(newarr, return_predecessors=True, indices=0))

Floyd Warshall

使用 floyd_warshall() 方法查找所有元素对之间的最短路径。

实例

查找所有元素对之间的最短路径:

import numpy as np
from scipy.sparse.csgraph import floyd_warshall
from scipy.sparse import csr_matrix

arr = np.array([
  [0, 1, 2],
  [1, 0, 0],
  [2, 0, 0]
])

newarr = csr_matrix(arr)

print(floyd_warshall(newarr, return_predecessors=True))

Bellman Ford

bellman_ford() 方法也可以查找所有元素对之间的最短路径,但此方法也可以处理负权重。

实例

使用给定的负权重图查找从元素 1 到元素 2 的最短路径:

import numpy as np
from scipy.sparse.csgraph import bellman_ford
from scipy.sparse import csr_matrix

arr = np.array([
  [0, -1, 2],
  [1, 0, 0],
  [2, 0, 0]
])

newarr = csr_matrix(arr)

print(bellman_ford(newarr, return_predecessors=True, indices=0))

深度优先顺序(Depth First Order)

depth_first_order() 方法返回节点的深度优先遍历。

此函数接受以下参数:

  1. 图。
  2. 从哪个元素开始遍历图。

实例

对于给定的邻接矩阵,以深度优先方式遍历图:

import numpy as np
from scipy.sparse.csgraph import depth_first_order
from scipy.sparse import csr_matrix

arr = np.array([
  [0, 1, 0, 1],
  [1, 1, 1, 1],
  [2, 1, 1, 0],
  [0, 1, 0, 1]
])

newarr = csr_matrix(arr)

print(depth_first_order(newarr, 1))

广度优先顺序(Breadth First Order)

breadth_first_order() 方法返回一个节点的广度优先遍历。

此函数接受以下参数:

  1. 图。
  2. 从哪个元素开始遍历图。

实例

对于给定的邻接矩阵,以广度优先方式遍历图:

import numpy as np
from scipy.sparse.csgraph import breadth_first_order
from scipy.sparse import csr_matrix

arr = np.array([
  [0, 1, 0, 1],
  [1, 1, 1, 1],
  [2, 1, 1, 0],
  [0, 1, 0, 1]
])

newarr = csr_matrix(arr)

print(breadth_first_order(newarr, 1))

相关

视频

RELATED VIDEOS

更多

免费

phpStudy极速入门视频教程

免费

Midjourney基础课程
初级 Midjourney基础课程

11149次学习

收藏

免费

极客学院Git使用视频教程

免费

尚观shell视频教程
高级 尚观shell视频教程

15709次学习

收藏

免费

尚观Linux入门视频教程
初级 尚观Linux入门视频教程

42887次学习

收藏

免费

尚观Linux初级视频教程
初级 尚观Linux初级视频教程

40264次学习

收藏

免费

尚观Linux中级视频教程
中级 尚观Linux中级视频教程

48298次学习

收藏

免费

尚观Linux高级视频教程
高级 尚观Linux高级视频教程

41982次学习

收藏

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

70.9万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号