Использование большой матрицы в Matlab

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

Что мне нужно: 1. Прочитайте некоторый фрагмент данных (который может поместиться в ОЗУ) из большой матрицы, хранящейся на жестком диске, и желательно, чтобы я хотел получить к ней доступ, как к обычной матрице Matlab. 2. Добавьте часть данных в конец большой матрицы, хранящейся на диске.


person mrgloom    schedule 07.08.2013    source источник
comment
Прежде чем прибегать к работе с чанками, пробовали ли вы использовать более экономичный тип данных, чем используемый по умолчанию double?   -  person Luis Mendo    schedule 07.08.2013
comment
о каком количестве данных мы говорим?   -  person MZimmerman6    schedule 07.08.2013
comment
Количество данных не имеет значения. Мне нужен интерфейс для работы с большой матрицей, например, для моего приложения я хочу ограничить размер фрагмента до 32 МБ\1 ГБ\или что-то еще, даже если на моем компьютере 8 ГБ памяти, поэтому мне нужен метод для доступа к части данных, хранящихся на жестком диске. Но в любом случае, если вас интересуют данные примерно от десятков до сотен Гб.   -  person mrgloom    schedule 07.08.2013


Ответы (3)


Вы найдете ответ здесь при чтении/записи части матрицы .mat.

%read
matObj = matfile('myBigData.mat');
loadedData = matObj.X(1:4,1:4);

%write
matObj.X(81:100,81:100) = magic(20);

ИЗМЕНИТЬ

Вот некоторый код, показывающий функцию добавления

A = ones(10,10);
save('A.mat', 'A','-v7.3');
clear A

matObj = matfile('A.mat','Writable',true);
matObj.A(8:10,8:10) = ones(3,3) * 3;       %modify
matObj.A(11,:) = ones(1,10)*4;             %append

disp(matObj.A)

Полная справка по Matlab для .mat (включая ограничения) находится здесь.

person marsei    schedule 07.08.2013
comment
Кажется, что используя этот подход, я не могу добавить к существующей матрице, но мне нужно создать новую переменную, поэтому она будет работать, но я должен хранить данные в щелях? - person mrgloom; 07.08.2013
comment
Вы можете добавить некоторые данные в матрицу. Смотрите отредактированный ответ. - person marsei; 07.08.2013

В Matlab Central File Exchange есть отличный проект, который решает проблему большого количества точек данных (или больших матриц). Это Project Waterloo File и Matrix Utilities Малкольма Лидиерта

http://www.mathworks.co.uk/matlabcentral/fileexchange/12250-project-waterloo-file-and-matrix-utilities

person geek_girl    schedule 07.08.2013

@Девушка гик

Спасибо за эти комментарии. Код файловых и матричных утилит находится на SourceForge:

https://sourceforge.net/projects/waterloo/files/Waterloo%20MATLAB%20File%20and%20Matrix%20Utilities/

Репозиторий Git для всего проекта находится по адресу:

https://sourceforge.net/p/waterloo/beta/ci/master/tree/

person user1610348    schedule 10.08.2013