【发布时间】:2017-01-08 21:43:27
【问题描述】:
% save .mat file in the matlab
train_set_x=1:50*1*51*61*23;
train_set_x=reshape(train_set_x,[50,1,51,61,23]);
save(['pythonTest.mat'],'train_set_x','-v7.3');
matlab中得到的数据大小为(50,1,51,61,23)。
我使用link 的指令在 Python 中加载 .mat 文件。
代码如下:
import numpy as np, h5py
f = h5py.File('pythonTest.mat', 'r')
train_set_x = f.get('train_set_x')
train_set_x = np.array(train_set_x)
train_set_x.shape 的输出是(23L, 61L, 51L, 1L, 50L)。预计为(50L, 1L, 51L, 61L, 23L)。所以我改变了形状
train_set_x=np.transpose(train_set_x, (4,3,2,1,0))
我很好奇 Python 和 matlab 之间数据形状的变化。我的代码有错误吗?
【问题讨论】:
-
对于早期的
.mat版本,scipy.io.loadmat生成的数组形状与 MATLAB 相同,但order='F'。因此它有点隐藏了这种差异。 -
@hpaulj:你说的早是什么意思? “后期” mat 版本的行为变化是什么?
-
MATLAB
save采用版本选项。V7和更早的版本使用原生 MATLAB 文件格式,而不是hdf5。loadmat处理这些。如果需要,我可以发布 Octave/numpy 示例。
标签: python matlab numpy file-io mat-file