将矩阵形式的图形转换为字典

Convert a graph in matrix form to a dict

假设我有一个布尔矩阵:(像这个):

X   0  1  2  3 
0   1, 1, 1, 1
1   1, 1, 1, 0
2   1, 1, 1, 1
3   1, 0, 1, 1 

并且我想将其转换为图形,以便找到两个顶点之间的最短路径(我将应用 Dijkstra 算法)。我想我已经知道如何在 python 中应用这个算法,我唯一的问题是在字典中转换这个矩阵,看起来像这样:

graph = {0 : {0:1, 1:1, 2:1, 3:1},
1 : {0:1, 1:1, 2:1},
2 : {0:1, 1:1, 2:1, 3:1},
3 : {0:1, 2:1, 3:1}}

嗯,我不确定我的想法是否正确,有人可以帮我解决这个问题吗?

您可以像问题中那样创建一个字典,或者您可以创建一个列表列表

graph = [
    [1, 1, 1, 1],
    [1, 1, 1, 0],
    [1, 1, 1, 1],
    [1, 0, 1, 1]
]

为方便起见,使用 numpy library (link 预构建 windows 安装程序)强烈推荐用于 python 中的矩阵操作。下面将把包含你的数据的文件读入一个 numpy 矩阵,正如我相信你在问的那样(如果我错了请纠正我)。

import numpy as np

with open("matrix.txt") as f:
    data = np.genfromtxt((line[3:] for line in f), delimiter=',', skiprows=1)

如果根据您的示例矩阵调用 print data,则输出如下:

[[ 1.  1.  1.  1.]
 [ 1.  1.  1.  0.]
 [ 1.  1.  1.  1.]
 [ 1.  0.  1.  1.]]

您会注意到我使用了硬编码值 3 来删除第一列 - 因为我没有您的实际数据我不知道这是否准确,因为我不知道' 知道格式化了多大的行值。您可能想使用 line[line.index(' '):] 来查找第一个 space 的位置,而不是为了更好的鲁棒性。

然后您可以对数据进行 numpy 矩阵 operations