Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用比v7.3更新的版本在MATLAB中保存大mat文件并在Python中读取_Python_Matlab - Fatal编程技术网

如何使用比v7.3更新的版本在MATLAB中保存大mat文件并在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

我在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(‘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文件转换为数组