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

标签 arrays matlab numpy scipy mat-file

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

这是另一个 3D 数组文件上相同 Linux 命令"file"的输出 这是由其他人在 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默认创建。

关于arrays - 使用 SciPy 读取 MATLAB MAT 文件时出现 "Expecting miMATRIX type"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53841246/

相关文章:

arrays - 如何从Kotlin中的ArrayList中删除项目

javascript - 将具有重复值的字符串数组转换为基于索引的对象数组

c++ - 如何获取数组中字符串元素的字符数? [C++]

matlab - 逻辑回归成本函数

matlab - 将 fprintf 与双数组和元胞数组结合使用

python - 使用无循环的numpy在二维数组中堆叠每2个数组

c++ - 这个 C++ 代码是可移植的吗? (假设多维数组有连续的内存布局)

algorithm - 计算多项式矩阵的逆

python - numpy.tile 不能作为 Matlab repmat

python - 提前比较两个或多个 csv 文件