Вы можете загрузить определенные переменные из файла .mat
, который имеет несколько переменных.Тем не менее, я не думаю, что вы можете загрузить только набор произвольных индексов из переменной в MATLAB.
Тем не менее, если ваша проблема относится к типу, в котором вам нужен доступ только к определенным строкам / столбцам, то я могу найти обходной путь для вас.
Вы можете создать struct
из матрицы, с каждым столбцом в качестве отдельного поля, а затем сохранить файл .mat
с параметром -struct
, чтобы каждое поле сохранялось как отдельная переменная.Таким образом, вы можете извлечь тот, который вам нужен.
dummy=randn(100,200);%# this is a test matrix
[dim1,dim2]=size(dummy);
dummyCell=mat2cell(dummy,dim1,ones(dim2,1));%# create a cell from the matrix
fieldNames=strcat(repmat({'col'},1,dim2),cellfun(@num2str,mat2cell(1:dim2,1,ones(dim2,1)),'UniformOutput',false));%# generate fieldnames for the struct
dummyStruct=cell2struct(dummyCell,fieldNames,2);%# create the struct
save('myDummyFile','-struct','dummyStruct')
Я не знаю, как напрямую преобразовать матрицу в структуру.Таким образом, вы сначала разбиваете каждый столбец на ячейки (порядок упорядочен потому, что вы указали, что вам нужно получить доступ к столбцам. Если вам нужны строки, вам придется все поменять).Это в клетке dummyCell
.Теперь, чтобы сохранить в структуре, нам нужно сгенерировать имена полей.Это в строковой ячейке fieldNames
.Он генерирует имена полей в форме col1
, col2
и т. Д. ... Вы можете назвать его чем-то значимым, если хотите.Затем мы конвертируем cell
в struct
, присваивая каждой ячейке соответствующее имя поля.Наконец, файл mat сохраняется с опцией -struct
, которая указывает MATLAB сохранять каждое поле как отдельную переменную.Все это должно быть сделано, когда ваша программа сохраняет файл гигантского мата.Теперь, если вам нужен доступ, скажем, col52
, все, что вам нужно сделать, это load('myDummyFile','col52')
.Вы также можете загрузить более одного, если вам нужно.
Помните, это хорошо работает, если у вас есть порядок в ваших требованиях к индексированию (т. Е. Каждая строка / каждый столбец), если вам нужен доступ к произвольным индексам в матрице, тогда это не будет работать.При создании ячеек / структур и их сохранении могут быть некоторые накладные расходы.Но это окупится, если вы собираетесь экономить только один раз, но часто заходите.
Если ваша матрица огромна (500х250000 не так уж велика по сегодняшним стандартам), вам придется следить за проблемами памяти с этим подходом, потому что мы дублируем всю матрицу в ячейку иструктура.Я написал это шаг за шагом, чтобы было понятнее, но вы можете уменьшить дублирование, создав ячейку из dummy
и присвоив ее себе и аналогично структуре.Однако это только уменьшает количество копий на 1, поскольку Matlab все еще должен скопировать переменную в память, чтобы назначить ее себе после манипуляции.