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

“Expecting miMATRIX type” error when reading MATLAB MAT-file with SciPy

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

1
2
3
4
5
voxels = zeros(30, 30, 30);
....
fileID1 = fopen(fullFileNameOut,'w','s');
fwrite(fileID1, voxels, 'uint8');
fclose(fileID1);

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

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

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

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

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

1
File3DArray.mat: MMDF mailbox

这是另一个3D阵列文件上相同Linux命令"文件"的输出
由其他人在MATLAB中创建的:

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

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


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

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

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