我在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 来读取和显示,但不能像使用 import scipy.io as spio
时生成的文件 A 那样直接查看矩阵中的数字。是否可能以类似于保存小矩阵的方式保存大矩阵并使用
import scipy.io as spio
在 Python 中读取该矩阵呢?
或者,是否可能在 MATLAB 中以 -v7.3
格式保存大矩阵,并在 Python 中使用相同的扩展名和 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 )
首先,在Python中,矩阵
A
的大小不是(16,200)
,而是(200,16)
。其次,当我将矩阵
A
用作神经网络的输入时,会出现错误"can't cast from structure to non-structure, except if the structure only has a single field python"
。我认为这是因为Python中矩阵A
的dtype类似于[('real','<f8'), ('imag','<f8')]
所致!!但是,如果在Matlab中保存矩阵,并使用
import scipy.io as spio
读取它,就可以获得dtype为复数的简单矩阵。
h5py
有什么问题吗?由于MAT现在是HDF5,因此使用MATLAB特定库没有任何意义。 - Daniel