使用 SciPy 读取 MATLAB MAT-file 时出现"Expecting miMATRIX type"错误



这是一个MATLAB问题:问题是由与Matlab文件和Python/numpy的交互引起的。我正在绑在MATLAB中编写一个UINT8类型的3-D阵列,然后使用Numpy在Python中读取它。这是创建文件的MATLAB代码:

voxels = zeros(30, 30, 30);
....
fileID1 = fopen(fullFileNameOut,'w','s');
fwrite(fileID1, voxels, 'uint8');
fclose(fileID1);

这是试图读取文件的Python代码:

filename = 'File3DArray.mat'
arr = scipy.io.loadmat(filename)['instance'].astype(np.uint8)

这是我运行Python代码时遇到的错误:(我认为这是问题的根源。什么是MM

raise TypeError('Expecting miMATRIX type here, got %d' % mdtype)

这是3D数组文件上Linux命令"文件"的输出我创建的(我认为这是问题的根源。什么是MMDF邮箱?):

File3DArray.mat: MMDF mailbox

这是另一个3D数组文件上同一linux命令'文件'的输出这是由其他人在Matlab中创建的:

GoodFile.mat: Matlab v5 mat-file (little endian) version 0x0100

我希望我在matlab中创建的文件与goodfile.mat相同(以便我可以使用上面的python/numpy代码段读取它们)。我认为,Linux"文件"命令的输出应与GoodFile输出相同。什么是MATLAB代码?

要创建一个垫子文件,请使用matlab save命令:

voxels = zeros(30, 30, 30, 'uint8');
save(fullFileNameOut, 'voxels', '-v7')

您需要将'-v7'(或'-v6')作为参数添加到save以创建较旧格式的文件,因为Scipy无法识别默认情况下创建的'-v7.3'文件。

相关内容

最新更新