我有一个循环,在每次迭代中生成一个100x10矩阵,我想在一个矩阵中保存这个循环的所有矩阵。假设我有一个包含5次迭代的循环,我希望最后有一个500x10矩阵(在追加循环的所有5个矩阵之后)。
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
我用save('s_all', 's','-append');
但它没有追加矩阵。我怎么能这样做?
答案 0 :(得分:1)
正如您可以在文件中看到的那样:
save(filename,variables,'-append')
将新变量添加到现有文件中。如果MAT文件中已存在变量,则保存将使用工作空间中的值覆盖它。
因此,save
只是在.mat
文件的末尾添加一个变量,而不是在.mat
文件中的变量末尾添加。
要将矩阵写入文件,最好使用dlmwrite
,如下所示:
dlmwrite(filename,s,'-append');
您可以找到更多详情here。 在完整的案例中,您可以这样做:
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
另一个解决方案是每次加载指定的矩阵,然后将矩阵附加到其中,然后附加到文件。
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