construct_dist_matrix#
- scipy.sparse.csgraph.construct_dist_matrix(граф, предшественники, направленный=True, null_value=np.inf)#
Построить матрицу расстояний из матрицы предшественников
Добавлено в версии 0.11.0.
- Параметры:
- графarray_like или разреженный
Матричное представление размера N x N направленного или ненаправленного графа. Если плотное, то отсутствующие рёбра обозначаются нулями или бесконечностями.
- предшественникиarray_like
Матрица N x N предшественников каждого узла (см. примечания ниже).
- направленныйbool, необязательно
Если True (по умолчанию), то работает с ориентированным графом: движение только от точки i к точке j по путям csgraph[i, j]. Если False, то работает с неориентированным графом: алгоритм может переходить от точки i к j по csgraph[i, j] или csgraph[j, i].
- null_valuebool, необязательно
значение для расстояний между несвязанными узлами. По умолчанию np.inf
- Возвращает:
- dist_matrixndarray
Матрица N x N расстояний между узлами вдоль пути, заданного матрицей предшественников. Если путь не существует, расстояние равно нулю.
Примечания
Матрица-предшественник имеет форму, опционально возвращаемую
shortest_path. Строка i матрицы предшественников содержит информацию о кратчайших путях из точки i: каждый элемент predecessors[i, j] даёт индекс предыдущего узла на пути из точки i в точку j. Если путь между точками i и j не существует, то predecessors[i, j] = -9999Следует отметить, что
shortest_pathпо умолчанию возвращает только матрицу расстояний. Сreturn_predecessors=True, возвращает кортеж с матрицей расстояний в качестве первого элемента и массивом предшественников в качестве второго элемента.Примеры
>>> import numpy as np >>> from scipy.sparse import csr_array >>> from scipy.sparse.csgraph import construct_dist_matrix
>>> graph = [ ... [0, 1, 2, 0], ... [0, 0, 0, 1], ... [0, 0, 0, 3], ... [0, 0, 0, 0] ... ] >>> graph = csr_array(graph) >>> print(graph)
with 4 stored elements and shape (4, 4)> Coords Values (0, 1) 1 (0, 2) 2 (1, 3) 1 (2, 3) 3 >>> pred = np.array([[-9999, 0, 0, 2], ... [1, -9999, 0, 1], ... [2, 0, -9999, 2], ... [1, 3, 3, -9999]], dtype=np.int32)
>>> construct_dist_matrix(graph=graph, predecessors=pred, directed=False) array([[0., 1., 2., 5.], [1., 0., 3., 1.], [2., 3., 0., 3.], [2., 1., 3., 0.]])