您好我正在尝试将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 ]])
目前我正在遍历每个元素,我确信有更好的pythonic方式直接使用pandas或numpy。有什么建议吗?
答案 0 :(得分:2)
您可以通过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.]])
答案 1 :(得分:1)
您可以使用ast.literal_eval
评估字典字符串,将其放入pandas
转置数据框(x
,y
,z
,{{1按照您的列顺序排列),然后使用w
:
as_matrix