scipy.sparse.csgraph.dijkstra¶
- scipy.sparse.csgraph.dijkstra(csgraph, directed=True, indices=None, return_predecessors=False, unweighted=False, limit=np.inf, min_only=False)¶
基于Fibonacci堆的Dijkstra算法
0.11.0 新版功能.
- 参数
- csgraph阵列、矩阵或稀疏矩阵,2维
表示输入图形的非负距离的N x N数组。
- directed布尔值,可选
如果为True(默认值),则在有向图上查找最短路径:仅沿路径csgraph从i点移动到j点 [i, j] 并沿着路径csgraph从点j到i [j, i] 。如果为false,则在无向图上查找最短路径:算法可以沿着任一csgraph从i点前进到j或j前进到i。 [i, j] 或csgraph [j, i] 。
- indicesARRAY_LIKE或INT,可选
如果指定,则仅计算从给定索引处的点开始的路径。
- return_predecessors布尔值,可选
如果为True,则返回大小(N,N)前置或矩阵
- unweighted布尔值,可选
如果为True,则查找未加权的距离。也就是说,不是寻找每个点之间的路径以使权重之和最小化,而是寻找路径以使边的数量最小化。
- limit浮动,可选
要计算的最大距离必须>=0。使用较小的限制将通过中止由距离>限制分隔的对之间的计算来减少计算时间。对于此类对,距离将等于np.inf(即,未连接)。
0.14.0 新版功能.
- min_only布尔值,可选
如果为False(默认值),则对于图形中的每个节点,查找从索引中的每个节点到每个节点的最短路径。如果为True,则对于图形中的每个节点,查找从索引中的任何节点到该节点的最短路径(这样可以大大加快速度)。
1.3.0 新版功能.
- 退货
- dist_matrixndarray,形状( [n_indices, ] N_节点,)
图形节点之间的距离矩阵。如果MIN_ONLY=FALSE,则DIST_MATRIX具有形状(n_索引,n_节点)和DIST_MATRIX [i, j] 给出沿图形从点i到点j的最短距离。如果MIN_ONLY=True,则dist_Matrix具有形状(n_node,),并包含给定节点从索引中的任何节点到该节点的最短路径。
- predecessorsndarray,形状( [n_indices, ] N_节点,)
如果MIN_ONLY=FALSE,则它具有Shape(n_index,n_node),否则它具有Shape(n_Nodes,)。仅当RETURN_PREPRECESSES==True时返回。前置任务的矩阵,可用于重建最短路径。前导矩阵的行i包含关于从点i开始的最短路径的信息:每个条目前导 [i, j] 给出从点i到点j的路径中上一个节点的索引。如果点i和j之间不存在路径,则前置节点 [i, j] =-9999
- sourcesndarray,形状(n_node,)
仅当MIN_ONLY=True且RETURN_PREPRECESSES=True时返回。包含到每个目标的路径最短的源的索引。如果限制内不存在路径,则将包含-9999。所传递的索引处的值将等于该索引(即到达节点i的最快方式是从节点i开始)。
注意事项
正如当前实现的那样,Dijkstra的算法在Directed==False时不适用于具有方向相关距离的图。即,如果csgraph [i,j] 和csgraph [j,i] 不相等并且两者都非零,则设置directed=false将不会产生正确的结果。
此外,此例程不适用于距离为负的图形。负距离可能导致无限循环,必须由专门的算法处理,如贝尔曼-福特算法或约翰逊算法。
示例
>>> from scipy.sparse import csr_matrix >>> from scipy.sparse.csgraph import dijkstra
>>> graph = [ ... [0, 1, 2, 0], ... [0, 0, 0, 1], ... [0, 0, 0, 3], ... [0, 0, 0, 0] ... ] >>> graph = csr_matrix(graph) >>> print(graph) (0, 1) 1 (0, 2) 2 (1, 3) 1 (2, 3) 3
>>> dist_matrix, predecessors = dijkstra(csgraph=graph, directed=False, indices=0, return_predecessors=True) >>> dist_matrix array([0., 1., 2., 2.]) >>> predecessors array([-9999, 0, 0, 1], dtype=int32)