我有一个NumPy2d数组,它是一个对称矩阵(方形矩阵,其中对角线上方的数字与对角线下方的数字相同)
示例输入矩阵:
edgeMatrix = np.array([[0., 2., 9.],
[2., 0., 1.],
[9., 1., 0.]])
我正在寻找一种非常有效的方法将这个大矩阵转换为嵌套字典,其中第一个键是矩阵的行索引,第二个dict键是矩阵的列索引。例如:
所需的嵌套dict格式:
edgeDict[0][0] = 0
edgeDict[0][1] = 2
edgeDict[0][2] = 9
edgeDict[1][0] = 2
edgeDict[1][1] = 0
edgeDict[1][2] = 1
edgeDict[2][0] = 9
edgeDict[2][1] = 1
edgeDict[2][2] = 0
我尝试过使用dict(enumerate(edgeMatrix.flatten(), 1))
,但未能弄清楚如何使这个工作的嵌套方面。
答案 0 :(得分:1)
试试这个:
In [5]: {i: {j: edgeMatrix[i,j] for (j, _) in enumerate(edgeMatrix[i])}
for (i, __) in enumerate(edgeMatrix)}
Out[5]:
{0: {0: 0.0, 1: 2.0, 2: 9.0},
1: {0: 2.0, 1: 0.0, 2: 1.0},
2: {0: 9.0, 1: 1.0, 2: 0.0}}
答案 1 :(得分:1)
您可以使用嵌套的生成器表达式创建嵌套的dict。
import numpy as np
edgeMatrix = np.array(
[[0., 2., 9.],
[2., 0., 1.],
[9., 1., 0.]]
)
edgeDict = dict(enumerate(dict(enumerate(row)) for row in edgeMatrix))
print(edgeDict)
<强>输出强>
{0: {0: 0.0, 1: 2.0, 2: 9.0}, 1: {0: 2.0, 1: 0.0, 2: 1.0}, 2: {0: 9.0, 1: 1.0, 2: 0.0}}