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