图是基本的数据结构。
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 方法在图中查找从一个元素到另一个元素的最短路径。
它接受以下参数:
求从元素 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() 方法查找所有元素对之间的最短路径。
查找所有元素对之间的最短路径:
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() 方法也可以查找所有元素对之间的最短路径,但此方法也可以处理负权重。
使用给定的负权重图查找从元素 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() 方法返回节点的深度优先遍历。
此函数接受以下参数:
对于给定的邻接矩阵,以深度优先方式遍历图:
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() 方法返回一个节点的广度优先遍历。
此函数接受以下参数:
对于给定的邻接矩阵,以广度优先方式遍历图:
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
科技资讯
1
2
3
4
5
6
7
8
9
精选课程
共5课时
17.2万人学习
共49课时
77万人学习
共29课时
61.7万人学习
共25课时
39.3万人学习
共43课时
70.9万人学习
共25课时
61.6万人学习
共22课时
23万人学习
共28课时
33.9万人学习
共89课时
125万人学习