Представьте, что я дал ориентированный граф и мне нужна матрица numpy достижимости, существует ли путь, поэтому R (i, j) = 1 тогда и только тогда, когда существует путь от i до j;
networkx имеет функцию has_path (G, source, target), однако она предназначена только для указанных c узлов source и taget; Поэтому я до сих пор делал это:
import networkx as nx
R=np.zeros((d,d))
for i in range(d):
for j in range(d):
if nx.has_path(G, i, j):
R[i,j]=1
Есть ли лучший способ добиться этого?
Вот минимальный пример с действительными числами:
import networkx as nx
import numpy as np
c=np.random.rand(4,4)
G=nx.DiGraph(c)
A=nx.minimum_spanning_arborescence(G)
adj=nx.to_numpy_matrix(A)
Здесь мы можем видеть, что это будет матрица смежности, а не матрицы достижимости - в моем примере с номером я получу
adj=
matrix([[0. , 0. , 0. , 0. ],
[0. , 0. , 0.47971056, 0. ],
[0. , 0. , 0. , 0. ],
[0.16101491, 0.04779295, 0. , 0. ]])
Таким образом, существует путь от 4 до 2 (adj (4,2 )> 0) и от 2 до 3 (прил. (2,3)> 0), поэтому также будет путь от 4 до 3, но прил. (4,3) = 0