【问题标题】:how to calculate short path geodesic distance of adjacency matrix csv [python]?如何计算邻接矩阵csv [python]的短路径测地距离?
【发布时间】:2016-07-25 09:38:33
【问题描述】:

我有一个图的邻接矩阵

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 将其转换为测地线距离矩阵?

我的目标是让它变成这样:

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) 的一个源和一个目的地,而不是整个矩阵。我真的需要你的帮助。 谢谢

【问题讨论】:

    标签: python csv matrix shortest-path adjacency-matrix


    【解决方案1】:

    networkx 可以计算整个矩阵。只需不需要为nx.shortest_path 函数提供源或目标(参见@​​987654321@ - 最后一个示例)。这是我的解决方案:

    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
    

    【讨论】:

    • 我已经安装了networkx、pandas、numpy,但还是报错
    • ` 文件 "C:\Users\kikiegoguma\Anaconda\Lib\site-packages\networkx\convert_matrix.py",第 487 行,在 from_numpy_matrix "nx,ny=%s"%(A. shape,)) networkx.exception.NetworkXError: ('邻接矩阵不是正方形。', 'nx,ny=(9, 0)') `
    • 您的csv 文件中可能有问题。请在每行值之间放置空行。你不能从这里复制粘贴它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2013-09-05
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多