问题
I am running a simulation where i generate huge 2d sparse matrices and hence i use FIND function to only store nonzero values with their indices.
Now for each iteration of for loop i generate such matrix and because they are all of different length I use cell-array to store these configurations. But for large simulations even squeezed-off format of cell-array crosses its limits of memory and hence i want to write these cell-array while running the code i.e. for each iteration append a new element into existing mat file.
for e.g.
for n=1:10
A=rand(5);
[i,j,vals]=find(A);
data={[i,j,vals]};
save('data','data','-append');
end
Here my final goal is to have a mat file where number of elements in "data" are 10. but i because of memory issues i cant save it outside the for loop i want to generate data{n} and append it in columnwise growing fashion. eventually giving me data{10}.
I tried to use MATFILE but it gives me error that it doesnt work with {} hence not working with cell arrays.
Thank you, Nitin
回答1:
You can use matfile with cells as long as you are not trying to index into the actual cells. Remember that cells are still arrays, so you can access each cell using array indexing. For example:
>> x = {'this', 'is', 'an', 'example'};
>> x{4}
ans =
example
>> x(4)
ans =
'example'
The following just initializes the data. Make sure to save it with the '-v7.3' tag, so that it supports efficient partial saving and loading.
data = {};
save('data.mat', 'data', '-v7.3');
Now you can access your data with the matfile
mf = matfile('data.mat', 'Writable', true);
for n=1:10
A=rand(5);
[i,j,vals]=find(A);
data={[i,j,vals]};
mf.data(end+1, 1) = data;
end
Reference: matfile documentation
回答2:
You can't append data to an existing variable with save
. You need different variables:
clear all
filename = 'data.mat';
save(filename) %// empty file, for now. We'll append variables within the loop
for n = 1:10
A = rand(5);
[i,j,vals] = find(A);
varname = ['data' num2str(n)]; %// varname is 'data1', 'data2' etc
assignin('base',varname,[i,j,vals]); %// create that variable
save(filename, varname, '-append') %// append it to file
end
来源:https://stackoverflow.com/questions/24082884/how-to-append-in-mat-file-row-or-columnwise-cellmatrix