如何使用比v7.3更新的版本在MATLAB中保存大mat文件并在Python中读取
我在MATLAB中有一个大矩阵,我需要保存它以便在python中使用它。但是,当我保存它时,除了使用如何使用比v7.3更新的版本在MATLAB中保存大mat文件并在Python中读取,python,matlab,Python,Matlab,我在MATLAB中有一个大矩阵,我需要保存它以便在python中使用它。但是,当我保存它时,除了使用-v7.3之外,MATLAB无法保存它,但是该文件版本无法在Python中使用以下命令读取: import scipy.io as spio Data = spio.loadmat('example_file.mat', squeeze_me=True) A = Data[‘B’] 因此需要使用h5py读取该数据,如下所示: import h5py Data = h5py.File(‘exam
-v7.3
之外,MATLAB无法保存它,但是该文件版本无法在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
,可以读取并显示扩展名为H5的矩阵A
,并且我无法将矩阵编号视为第一种方法(使用import scipy.io as spio
)生成的文件A
是否可以从MATLAB中保存一个大矩阵,方法与保存一个小矩阵类似,然后使用import scipy.io as spio在Python中读取它?
或者另一个选项,是否可以使用Python中的–v7.3
读取保存在MATLAB中的大矩阵,并使用导入scipy.io作为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 )
首先,在python中,矩阵A
的大小不是(16200)
!!它的大小(200,16)
其次,当我使用矩阵A
作为神经网络的输入时,它显示了一个错误“不能从结构转换为非结构,除非该结构只有一个字段python”
。我认为这是因为python中矩阵A
的数据类型类似于[('real','p>对于一个矩阵,将其保存到二进制文件中:
clear
SomeData = 1:100*300;
MyMatrix=reshape(SomeData,100,[]);
disp(class(MyMatrix)) % you must know the data type in python. maybe save this info in file name.
MyMatrixBytes=typecast(MyMatrix(:),'uint8');
fid=fopen('z:/MyMatrixBytes.bin','wb');
fwrite(fid,MyMatrixBytes);
fclose(fid);
在python中:
import numpy as np
# dtype: double->float64 , single->float32
MyMatrixBytes = np.fromfile("z:/MyMatrixBytes.bin",dtype='float64')
您可以使用-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)
这将使您能够在没有该错误的情况下使用结果输出。
祝你好运使用h5py
有什么问题?因为MAT现在是HDF5,所以使用MATLAB特定的库没有任何意义。一个相关的问题:@Daniel使用h5py的问题我无法将文件读取为numpy。这真的很奇怪,因为数据必须从某个地方显示较大的大小。你能提供一个例子吗?如果您只需保存x=rand(16200)对于mat文件?@Daniel我在问题中给出了一个示例,并试图进一步解释这个问题。它显示了以下错误:使用类型转换时出错第一个输入参数必须是完整的、不复杂的数值…第二个我需要将其保存为mat文件,…bin文件可以在python中用作数组?您的数组很复杂?如果是这样,请分离一个实数组NDIMAG值并保存它们。这是一个简单的matlab程序。在python中,我给了你一行代码来将bin文件转换为数组