2016-07-25 8 views
0

私はグラフ隣接行列の短いパス測地線距離を計算する方法csv [python]?

のpythonを使用してdiscance行列を測地線に変換する方法を

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

の隣接行列がありますか?

私の目標は、このようにそれを作ることです。

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でいくつかのコードを試してみたが、それは唯一のソースと1つの(n個)の宛先ではない行列全体で計算することができます。私は本当にあなたの助けが必要です。 ありがとう

答えて

0

networkxは、行列全体を計算することができます。 nx.shortest_path関数にソースまたは宛先を渡す必要はありません(https://networkx.github.io/documentation/networkx-1.10/reference/generated/networkx.algorithms.shortest_paths.generic.shortest_path.html - 最後の例を参照)。ここに私のソリューションです:

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エラーました:\ Users \ユーザーkikiegoguma \アナコンダ\ Libの\サイト、パッケージを( '接線行列は正方形ではありません。'、 'nx、%n')% ny =(9、0) ') ' – kikiegoguma

+0

あなたの' csv'ファイルに何か問題があるかもしれません。各行の間に空白行を入れてください。ここからコピー&ペーストすることはできません。 –

関連する問題