Как прочитать сложную трехмерную матрицу (двоичный файл) в Matlab без использования метода чередования / преобразования? - PullRequest
0 голосов
/ 02 декабря 2018

У меня очень большая трехмерная матрица, данные записаны на диск для дальнейшего использования.Записать матрицу в мусорное ведро очень просто, однако при ее чтении возникнут некоторые проблемы.

Записать в мусорное ведро:

z=repmat(complex(rand(5),rand(5)),[1 1 5])
z_imag = imag(z);
z_real = real(z);
adjacent = [z_real z_imag];
fileID = fopen('complex.bin','w');
fwrite(fileID,adjacent,'double')

А теперь я пытаюсь прочитать ее обратно, используя memmapfile:

m = memmapfile('complex.bin', 'Offset', 0, 'Format', {'double' [5,5,5] 'x'});
complexValues = complex(m.Data(:).x(1,:), m.Data(:).x(2,:)); %this line doesn't work though, just for explanation's sake

Я получил сообщение об ошибке, в котором говорилось, что

Ошибка при использовании memmapfile / subsref (строка 764). Операция подписки в поле данных попыталась создать список, разделенный запятыми.Класс memmapfile не поддерживает использование разделенных запятыми списков при подписке.

Я имел в виду решение здесь , предлагаемое решение использовало reshape для формированияматрица заранее (в отличие от моего метода выше).Я стараюсь избегать использования изменения формы в моем коде, поскольку я имею дело с очень большими данными, которые могут быть вычислительно дорогими и занимающими много времени.Есть ли альтернативный / лучший способ сделать это?

Заранее спасибо!

...