2016-03-12 2 views
1

Я пытаюсь сохранить карту как файл * .mat, который довольно большой. (. Где-то около 4 или 5gigs я не могу быть уверен, потому что я никогда не мог сохранить файл ...)Matlab save save container.Map()

карта генерируется:

[amap, ~] = load_audio(config); 

и сохранены позже по

save('audioMap', 'amap'); 

Теперь сгенерированный файл имеет только 218 байт, но ошибок не возникает. Попытка прочитать содержимое файла с whos('-file', 'audioMap.mat') приводит к следующей ошибке:

Warning: Unable to read some of the variables due to unknown MAT-file error. 

каждой запись карты является ячейкой с 6 значений. Теперь запрашивая размер карты в результатах рабочего пространства Matlab в следующий вывод:

Name   Size   Bytes Class    Attributes 
amap  2279x1    112 containers.Map 

Теперь ясно размер не правильно, но я могу перебирать карты и все данные присутствуют. При запросе размера записи это примерно 2,5 МБ.

Я также попытался сохранить переменную из рабочей области, щелкнув правой кнопкой мыши и сохранил - как с тем же результатом. У кого-нибудь есть идеи, почему Matlab не может правильно сохранить эту карту?

+1

Вы пытались сохранить его, используя флаг ['-v7.3'] (http://www.mathworks.com/help/matlab/ref/save.html#inputarg_version). Понятно, что MATLAB думает, что объект намного меньше, чем он, поэтому он не выдаст нормального предупреждения об использовании этого флага. – Suever

+0

Кроме того, что на самом деле * внутри * каждого из этих элементов карты? Являются ли они обычными объектами? – Suever

+1

Это может быть проблема с сериализацией, которая требуется для сохранения объектов. Является ли container.Map вашей единственной объектно-ориентированной структурой данных? Если да, попробуйте 'amap_struct = struct (amap)' и сохраните полученную структуру. Нет автоматизма для возврата объектов, но вы можете проверить, есть ли все данные после загрузки (amap_struct.serialisation.values) – Daniel

ответ

1

Вы где пытаются написать MAT-файла версии 7.0, который has a maximum variable size of 2^31 bytes = 2GB

При попытке записать переменные, размер которых превышает предел, ожидаемое поведение будет receive a warning при сохранении переменной.

Warning: Variable 'varname' cannot be saved to a MAT-file whose version is older than 7.3. To save this variable, use the -v7.3 switch. Skipping...

По какой-то причине предупреждение не было поднято, но неспособность писать такие большие объекты - это ожидаемое поведение.

Смежные вопросы