Matlab высокие массивы и память - PullRequest
0 голосов
/ 11 июня 2018

Проблема, с которой я столкнулся, может быть воспроизведена с помощью приведенного ниже кода.

gcp;
C={};
for i=1:1000
    C = [C,{tall(ones(1000,1,1000,2))}];
    pause(0.05)
end

Я ожидаю, что высокие массивы вводятся в память только для оценки выражений, а затем тольконесколько строк за раз, вышеописанное не вызовет немедленных проблем с памятью.Тем не менее, кажется, что он заполняет мой оперативный памяти точно так же, как при вызове

gcp;
C={};
for i=1:1000
    C = [C,{ones(1000,1,1000,2)}];
    pause(0.05)
end

То есть использование высоких массивов, похоже, не влияет на использование памяти вообще.

Если я хочу хранить большие массивы данных, создаваемых MatLab, вне памяти, как мне это сделать?Использование больших массивов, похоже, не работает.

Примечание. Я использую MatLab 2017a, которая не поддерживает вертикальную конкатенацию высоких массивов.Поэтому я использую структуру

{rows1,rows2,...,rowsn}

для представления блоков строк одного и того же массива.Это не может быть оптимальным.

1 Ответ

0 голосов
/ 12 июня 2018

Как упоминалось в комментариях - локальный конструктор массива tall (где вы предоставляете ему локальные данные, а не datastore) обычно используется только для прототипирования в памяти, прежде чем вы направите массивы tall на свой реальныйбольшие данные в datastore.

Вы можете использовать tall/write для записи ваших высоких массивов на диск, а затем сделать datastore чтение из мест, которые вы использовали в write.Это обработает данные, не загружая их все обратно в память сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...