将矩阵形式的图形转换为字典
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。
假设我有一个布尔矩阵:(像这个):
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。