首页 > 解决方案 > python - 为什么从matlab中获取的矩阵形式在读取到python时会发生变化

问题描述

我从matlab保存了一个-v7.3版本的大文件,当用python读取它时,矩阵的形状发生了变化!这正常吗?

例如,让我们在 MATLAB 中有以下矩阵,

clear all, clcl 
A = randn(10,3) + randn(10,3)*i;
save('example.mat','-v7.3');     %% The saved file is example.mat with version 7.3

上面,保存的文件是 example.mat 一个大小为 (10,3) 的矩阵

所以,让我们去 python 读取那个文件:

import numpy as np
import h5py as h5 

data_try = h5.File('example.mat', 'r')
A = np.array(data_try) 
A = A.view(np.complex)  #here the matrix equivalent to that one in matlab

但我发现 python 中的 A 大小为 (3,10) !而且当具有三维矩阵时,形状也在变化!

python读取来自matlab的矩阵转置是正常的吗??!!或发生了错误!
但是,当使用以下其他方式时:

import scipy.io as spio
Data = spio.loadmat('example.mat', squeeze_me=True)
A = Data[‘A’]

在那种情况下,一切都很好,但不幸的是我们不能将这种方式用于大矩阵!

请问,这个问题有什么解决方案吗?

标签: pythonmatlabmatrix

解决方案


您可能会在 Matlab(列主要)和 Numpy(行主要)中遇到不同内存对齐的问题...检查例如此问题以进行相关讨论和解决方案(以 Fortran 样式进行重塑,这也是列主要) .

SciPy 的.mat界面会自动处理这种重新解释,这就是您在使用它时不会遇到问题的原因。


推荐阅读