In [853]: from scipy import io
In [854]: x = np.array([1,20,0.4,0.5,9,8.8])
...: y = np.array([0.3,0.6,1,1,0.01,0.7])
...:
In [855]: data={'x':x, 'y':y}
In [856]: io.savemat('test.mat',data)
In [857]: io.loadmat('test.mat')
Out[857]:
{'__globals__': [],
'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Sun Nov 27 09:30:35 2016',
'__version__': '1.0',
'x': array([[ 1. , 20. , 0.4, 0.5, 9. , 8.8]]),
'y': array([[ 0.3 , 0.6 , 1. , 1. , 0.01, 0.7 ]])}
为了与MATLAB兼容,这些数组被转换成了二维orderF数组。
h5py是另一个选项。较新的Matlab版本使用HDF5格式,提供了与其他语言更大的兼容性。
np.savez可以保存数组字典,而无需修改它们:In [881]: data={'x':x, 'y':y,'xy':np.array((x,y))}
In [882]: np.savez('test',**data)
In [883]: D=np.load('test.npz')
In [884]: D.keys()
Out[884]: ['y', 'x', 'xy']
In [885]: D['xy']
Out[885]:
array([[ 1.00000000e+00, 2.00000000e+01, 4.00000000e-01,
5.00000000e-01, 9.00000000e+00, 8.80000000e+00],
[ 3.00000000e-01, 6.00000000e-01, 1.00000000e+00,
1.00000000e+00, 1.00000000e-02, 7.00000000e-01]])
D是一个NPZFile对象,它是一个延迟加载程序。所以它不会将所有数组直接转储到内存中。您可以通过密钥名访问它们。