我想在python中加载.mat文件。用scipy.loadmat加载nested defaultdict
import collections
import scipy.io
out_o = collections.defaultdict(list)
out_t = collections.defaultdict(list)
out_o['o1'] = {'x':[1,2,3], 'y':[4,5,6]}
out_o['o2'] = {'x':[7,8,9], 'y':[10,11,12]}
out_t['t'] = out_o
scipy.io.savemat('test.mat', out_t)
我怎样才能重建从文件test.mat
out_t
没有硬编码的out_o
键: 该文件是这样产生的?
我设法与键:
input = scipy.io.loadmat('test.mat', squeeze_me=True, struct_as_record=True)
print(list(input['t'].dtype.names))
[ '氧气', '01']
但我如何访问数据?
print(input['t'])
打印:
((阵列([7,8,9]),阵列([10,11,12])),(阵列([1,2,3] ),阵列([4,5,6])))
那作为如我设法到x
和y
靠近...
编辑:
感谢hpauljs的回答,我设法解决了我的问题。
我不可能硬编码oi
S,所以我用dtype.fields.keys()
:
input = scipy.io.loadmat('test.mat')
objs = list(input['t'].dtype.fields.keys())
in_o = collections.defaultdict(list)
in_t = collections.defaultdict(list)
for i in objs:
in_o[i]={'x': list(input['t'][i][0,0]['x'][0,0][0]),'y': list(input['t'][i][0,0]['y'][0,0][0])}
in_t['t'] = in_o
print(in_t == out_t)
什么你没有'struct_as_record'参数? 'savemat'将数据压缩成与matlab兼容的结构。它不是为了腌制蟒蛇而设计的。 – hpaulj