这是一个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代码是什么?
答案 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。>