2016-07-25 3 views
0

i는 인접성 매트릭스 그래프방법 인접성 매트릭스 CSV [파이썬] 짧은 경로 측지선 거리를 계산?

graph

n 1 2 3 4 5 6 7 8 9

1 0 1 1 1 0 0 0 0 0

2 1 0 1 0 0 0 0 0 0

3 1 1 0 1 0 0 0 0 0

4 1 0 1 0 1 1 0 0 0

5 0 0 0 1 0 1 1 1 0

6 0 0 0 1 1 0 1 1 0

7 0 0 0 0 1 1 0 1 1

8 0 0 0 0 1 1 1 0 0

9 0 0 0 0 0 0 1 0 0

가 어떻게 Python을 사용 discance 행렬로 변환하는 측지선 있나?

내 목표는이처럼 만드는 것입니다 :

n 1 2 3 4 5 6 7 8 9

1 0 1 1 1 2 2 3 3 4

2 1 0 1 2 3 3 4 4 5

3 1 1 0 1 2 2 3 3 4

4 1 2 1 0 1 1 2 2 3

5 2 3 2 1 0 1 1 1 2

6 2 3 2 1 1 0 1 1 2

7 3 4 3 2 1 1 0 1 1

8 3 4 3 2 1 1 1 0 2

9 4 5 4 3 2 2 1 2 0

은 내가 networkx에서 몇 가지 코드를 시도했지만 그것은 단지 하나의 소스와 (n)이없는 전체 행렬의 하나 개의 목적지에 계산할 수 있습니다. 너의 도움이 정말로 필요해. 는

답변

0

networkx 전체 행렬을 계산할 수 있습니다 감사합니다. 하나는 (- 마지막 예를 https://networkx.github.io/documentation/networkx-1.10/reference/generated/networkx.algorithms.shortest_paths.generic.shortest_path.html 참조) nx.shortest_path 기능에 소스 또는 대상을 제공 할 필요가 없습니다. 여기 내 솔루션입니다 :

import pprint 
import networkx as nx 
import pandas as pd 
import numpy as np 
mat = pd.read_csv('adjacency.csv', index_col=0, delim_whitespace=True).values 
G = nx.from_numpy_matrix(mat) 
p = nx.shortest_path(G) 
shortest_path_mat = np.zeros(mat.shape) 
for i in range(mat.shape[0]): 
    shortest_path_mat[i, :] = np.array([len(x) for x in p[i].values()]) 
pprint.pprint(shortest_path_mat-1) 

adjacency.csv

n 1 2 3 4 5 6 7 8 9 

1 0 1 1 1 0 0 0 0 0 

2 1 0 1 0 0 0 0 0 0 

3 1 1 0 1 0 0 0 0 0 

4 1 0 1 0 1 1 0 0 0 

5 0 0 0 1 0 1 1 1 0 

6 0 0 0 1 1 0 1 1 0 

7 0 0 0 0 1 1 0 1 1 

8 0 0 0 0 1 1 1 0 0 

9 0 0 0 0 0 0 1 0 0 
+0

나는 networkx, 팬더, NumPy와 설치하지만 여전히 – kikiegoguma

+0

'파일 "C 오류했습니다 : \ 사용자 \ kikiegoguma \ 아나콘다 \ lib 디렉토리 \ 사이트 - 패키지 ('접두사가 정사각형이 아닙니다.', 'nx, ny = % s', 'xx' 뉴욕 = (9, 0) ')' – kikiegoguma

+0

아마 뭔가는'csv' 파일에 잘못된 것입니다. 값의 각 줄 사이에 빈 줄을 넣으십시오. 여기에서 복사하여 붙여 넣을 수 없습니다. –