将循环迭代的矩阵保存在一个矩阵中

时间:2017-05-24 11:06:51

标签: matlab loops save

我有一个循环,在每次迭代中生成一个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'); 但它没有追加矩阵。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

正如您可以在文件中看到的那样:

  

save(filename,variables,'-append')将新变量添加到现有文件中。如果MAT文件中已存在变量,则保存将使用工作空间中的值覆盖它。

因此,save只是在.mat文件的末尾添加一个变量,而不是在.mat文件中的变量末尾添加。

解决方案1:

要将矩阵写入文件,最好使用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

解决方案2:

另一个解决方案是每次加载指定的矩阵,然后将矩阵附加到其中,然后附加到文件。

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