您好,我正在尝试将 4x4 矩阵从字典加载到 np 数组中,
u'{"column0":{"x":1,"y":0.0,"z":0.0,"w":-1.0},
"column1":{"x":0.0,"y":1,"z":0.0,"w":-1.0},
"column2":{"x":1,"y":1,"z":1.0,"w":-1.0},
"column3":{"x":-1.0,"y":-1.0,"z":-1.0,"w":-1.0}
}'
我想将其加载为
array([[ 1,0., 0.,-1 ],
[ 0.,1,0.,-1 ],
[ 1,1,1,-1 ],
[ -1,-1,-1,-1 ]])
目前我正在循环每个元素,我确信有更好的直接使用 pandas 或 numpy 的 pythonic 方法。有什么建议吗?
最佳答案
您可以通过numpy
或pandas
来完成此操作。这两种方法都需要 ast.literal_eval
。
由于字典是无序的,因此每种方法都需要小心确保列按照您的要求进行排序。
设置
import numpy as np, pandas as pd
from ast import literal_eval
mystr = """{"column0":{"x":1,"y":0.0,"z":0.0,"w":-1.0},
"column1":{"x":0.0,"y":1,"z":0.0,"w":-1.0},
"column2":{"x":1,"y":1,"z":1.0,"w":-1.0},
"column3":{"x":-1.0,"y":-1.0,"z":-1.0,"w":-1.0}
}"""
d = literal_eval(mystr)
选项 1:numpy
res_np = np.array([[v[j] for j in ['x', 'y', 'z', 'w']] for k, v in d.items()])
# array([[ 1., 0., 0., -1.],
# [ 0., 1., 0., -1.],
# [ 1., 1., 1., -1.],
# [-1., -1., -1., -1.]])
选项2:pandas
res_df = pd.DataFrame(d).T.iloc[:, [1, 2, 3, 0]].values
# array([[ 1., 0., 0., -1.],
# [ 0., 1., 0., -1.],
# [ 1., 1., 1., -1.],
# [-1., -1., -1., -1.]])
关于python - 如何在Python中将字典加载到ndarray中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49737995/