将Python .npz保存为MATLAB .mat文件

时间:2018-02-15 16:35:02

标签: python matlab scipy

我有一个.npz文件,我想将其保存为.mat文件。

文件A.npz包含A['arr_0', 'arr_1', 'arr_2']

目前,我使用以下方法单独保存每个:

import scipy.io as sio
a1 = A['arr_0']
sio.savemat('a1.mat', mdict={'a1': a1}

arr_i内的每个A.npz

有没有一种简单的方法可以将所有内容保存到.mat(即通过单元格格式)?或者我应该创建一个脚本来简单地将它们全部保存在像时尚一样的循环中?

2 个答案:

答案 0 :(得分:1)

创建npz

In [147]: np.savez('test.npz',x=np.arange(3),y=np.ones((3,3)),z=np.array(3))

负载; data是文件/变量的字典;通过索引加载:

In [148]: data = np.load('test.npz')
In [149]: list(data.keys())
Out[149]: ['z', 'y', 'x']
In [150]: data['x']
Out[150]: array([0, 1, 2])

将类似的字典保存到.mat:

In [151]: io.savemat('a1.mat', mdict={'x':data['x'],'y':data['y'],'z':data['z']})
In [152]: io.loadmat('a1.mat')
Out[152]: 
{'__globals__': [],
 '__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Thu Feb 15 09:52:42 2018',
 '__version__': '1.0',
 'x': array([[0, 1, 2]]),
 'y': array([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]]),
 'z': array([[3]])}

替代结构:

io.savemat('a1.mat', mdict={key:data[key] for key in data.keys()})

甚至:

io.savemat('a1.mat', mdict=data)

因为data是字典。

答案 1 :(得分:0)

用于shell脚本等的单行代码:

python -c "import pylab, scipy.io; scipy.io.savemat('tmp.mat', pylab.np.load('tmp.npz'))"