lighting
lighting

Reputation: 400

Save matrices of a loop iteration in one matrix

I have a loop that makes a 100x10 matrix in every iteration, i want to save all the matrices of this loop in one matrix. assuming that i have a loop with 5 iterations, i want to have a 500x10 matrix in the end (after appending all the 5 matrices of the loop).

for ii = 1:numfiles
str = fullfile(PathName,FileName{ii});
file_id = fopen(str);
data = fread (file_id)';
....
s = zeros (100, 10);
%doing some stuffs
save('s_all', 's','-append');
end

I have used save('s_all', 's','-append'); but it doesn't append the matrices. How can i do that?

Upvotes: 1

Views: 427

Answers (1)

OmG
OmG

Reputation: 18838

As you can read in the document:

save(filename,variables,'-append') adds new variables to an existing file. If a variable already exists in a MAT-file, then save overwrites it with the value in the workspace.

Therefore, save just adds a variable at the end of the .mat file, not to add at the end of a variable inside the .mat file.

Solution 1:

To write matrix into the file it would be better using dlmwrite likes the following:

dlmwrite(filename,s,'-append');

You can find more details here. In a complete case you can do:

filename = 's_all.csv';   
for ii = 1:numfiles
    str = fullfile(PathName,FileName{ii});
    file_id = fopen(str);
    data = fread (file_id)';
    % ...
    s = zeros (100, 10);
    %doing some stuffs
    dlmwrite(filename,s,'-append');
end

Solution 2:

The other solution is each time load the specified matrix, then attach the matrices into it, and then append to the file.

filename = 'file.mat';   
% suppose originMatrix is an empty matrix or a matrix with columns size 10
for ii = 1:numfiles
    load(filename,'originMatrix');
    s = zeros (100, 10);
    %doing some stuffs
    originMatrix = [originMatrix; s];
    save(filename,'originMatrix','-append');
end

Upvotes: 1

Related Questions