Ошибка «Ожидается тип miMATRIX» при чтении MATLAB MAT-файла с SciPy - PullRequest
0 голосов
/ 19 декабря 2018

Это вопрос MATLAB: проблема вызвана взаимодействием с файлами MATLAB и Python / numpy.Я пытаюсь написать 3-D массив типа uint8 в MATLAB, а затем прочитать его на 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)

Это вывод команды Linux 'file' в файле 3D-массива, который я создал (я думаю, этоявляется источником проблемы. Что такое почтовый ящик MMDF?):

File3DArray.mat: MMDF mailbox

Это вывод той же команды Linux 'file' в другом файле трехмерного массива, который был создан кем-то другим в MATLAB:

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

Я хочу, чтобы файлы, которые я создаю в MATLAB, были такими же, как и GoodFile.mat (чтобы я мог читать их с помощью сегмента кода Python / Numpy, приведенного выше). Вывод команды Linux 'file' fileя думаю, что он должен совпадать с выводом GoodFile. Что такое код MATLAB, который это делает?

1 Ответ

0 голосов
/ 19 декабря 2018

Чтобы создать MAT-файл, используйте команду MATLAB save:

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

Вам необходимо добавить '-v7' (или '-v6') в качестве аргумента дляsave для создания файла в более старом формате, поскольку SciPy не распознает '-v7.3' файлы , созданные по умолчанию.

...