"Expecting miMATRIX type" 使用 SciPy 读取 MATLAB MAT 文件时出错

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

这是一个 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)

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

File3DArray.mat: MMDF mailbox

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

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

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

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

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

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