首页 > 解决方案 > 如何在 MATLAB 中以高于 v7.3 的版本保存大 mat 文件并在 Python 中读取

问题描述

我在 MATLAB 中有一个大矩阵,我需要保存它以便在 python 中使用它。但是,当我保存它时,MATLAB 无法保存它,除非-v7.3使用以下命令在 Python 中读取该文件版本:

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

因此需要使用 读取该数据h5py,如下所示:

import h5py 
Data = h5py.File(‘example_file.mat’. ‘r’)
A = Data[‘B’]

在这种使用方式中h5pyA可以读取并显示扩展名为 H5 的矩阵,并且我看不到矩阵编号,因为文件 A 是由第一种方式(使用import scipy.io as spio)产生的。

是否可以以类似于保存小矩阵的方式从 MATLAB 中保存大矩阵,然后使用 Python 在 Python 中读取它import scipy.io as spio
或者其他选项,是否可以使用–v7.3Python 读取保存在 MATLAB 中的大矩阵,并使用相同的扩展名读取矩阵import scipy.io as spio

编辑

以下是以 7.3 格式保存矩阵时发生的情况的示例

在 MATLAB 中,我们可以生成矩阵并保存在 -v7.3 版本中:

example = randn(16,200) + i*randn(16,200); 
save('example.mat', '-v7.3')

我在 v7.3 中将其保存在这里,因为如果矩阵非常大,我无法保存它,除非在那个版本中!

然后,要在 python 中读取该文件,我们必须使用h5py如下:

import h5py as h5 
data_try = hs.File('example.mat', 'r')
A = np.array(data_try ) 

首先,矩阵A 不是(16,200)python中的大小!它的大小(200,16) 其次,当我使用例如矩阵A作为神经网络的输入时,它显示的错误为"can't cast from structure to non-structure, except if the structure only has a single field python". 我认为那是因为Apython 中矩阵的 dtype 是这样的[('real','<f8'), ('imag','<f8')]。!!

当从 matlab 中保存比 v7.3 更新的版本的矩阵然后能够使用它读取它时,所有这一切都是不同的,import scipy.io as spio这给我们所有人提供了一个简单的 dtype 矩阵:复杂

标签: pythonmatlab

解决方案


您可以使用 -v7.3 在 MATLAB 中保存大矩阵,然后在 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)  or 
A = A.view(np.complex128)

这将使您能够使用结果输出 A 而不会出现该错误。祝你好运


推荐阅读