python - 如何在 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’]
在这种使用方式中h5py
,A
可以读取并显示扩展名为 H5 的矩阵,并且我看不到矩阵编号,因为文件 A 是由第一种方式(使用import scipy.io as spio
)产生的。
是否可以以类似于保存小矩阵的方式从 MATLAB 中保存大矩阵,然后使用 Python 在 Python 中读取它import scipy.io as spio
?
或者其他选项,是否可以使用–v7.3
Python 读取保存在 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"
. 我认为那是因为A
python 中矩阵的 dtype 是这样的[('real','<f8'), ('imag','<f8')]
。!!
当从 matlab 中保存比 v7.3 更新的版本的矩阵然后能够使用它读取它时,所有这一切都是不同的,import scipy.io as spio
这给我们所有人提供了一个简单的 dtype 矩阵:复杂
解决方案
您可以使用 -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 而不会出现该错误。祝你好运
推荐阅读
- matlab - Matlab:不均匀间距的箱线图
- oracle - oracle怎么做累计数
- javascript - 为什么在服务器端设置 Access-Control-Allow-Origin 后仍然出现跨源错误?
- android - 我想知道我创建此 UI 的方法是否不正确
- java - 如何撤消 java NetBens 中的替换代码
- python - Altair - 用不同颜色表示负和正的区域图
- flutter - Dart 中字符串的默认值是多少?
- r - 需要帮助使用 grid.arrange 来安排两个时间序列图
- angular - 如何使用角度 8 在表格中显示数组值?
- python - 如何制作一个 python 3 程序来搜索谷歌?