使用SciPy读取MATLAB MAT文件时出现“期望的miMATRIX类型”错误

时间:2018-12-18 21:21:18

标签: arrays matlab numpy scipy mat-file

这是一个MATLAB问题:问题是由与MATLAB文件和Python / numpy的交互引起的。我想在MATLAB中编写uint8类型的3-D数组,然后在Python中使用numpy读取它。这是创建文件的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命令'file'的输出 我创建的(我认为这是问题的根源。什么是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代码是什么?

1 个答案:

答案 0 :(得分:2)

要创建MAT文件,请使用MATLAB save命令:

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

您需要将'-v7'(或'-v6')添加为save的参数,以创建较旧格式的文件,默认情况下为SciPy doesn't recognize the '-v7.3' files