将循环迭代的矩阵保存在一个矩阵中
Posted
技术标签:
【中文标题】将循环迭代的矩阵保存在一个矩阵中【英文标题】:Save matrices of a loop iteration in one matrix 【发布时间】:2017-05-24 11:06:51 【问题描述】:我有一个循环在每次迭代中生成一个 100x10 矩阵,我想将此循环的所有矩阵保存在一个矩阵中。假设我有一个包含 5 次迭代的循环,我希望最后有一个 500x10 矩阵(在附加循环的所有 5 个矩阵之后)。
for ii = 1:numfiles
str = fullfile(PathName,FileNameii);
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');
但它不附加矩阵。我该怎么做?
【问题讨论】:
当你的意思是save
你的意思是“创建一个包含所有矩阵的变量”或“将它保存到内存中”
【参考方案1】:
正如您在文档中看到的那样:
save(filename,variables,'-append')
将新变量添加到现有文件。如果 MAT 文件中已存在变量,则 save 会使用工作区中的值覆盖它。
因此,save
只是在.mat
文件的末尾添加一个变量,而不是在.mat
文件内的变量末尾添加。
解决方案 1:
要将矩阵写入文件,最好使用dlmwrite
,如下所示:
dlmwrite(filename,s,'-append');
您可以找到更多详细信息here。 在完整的情况下,您可以这样做:
filename = 's_all.csv';
for ii = 1:numfiles
str = fullfile(PathName,FileNameii);
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
【讨论】:
我只是想把它保存在一个 .mat 文件中。 所以你应该将它们附加到一个矩阵中。您不能将数据附加到.mat
文件中的变量中。
我明白了,所以我应该先创建一个矩阵,然后将它们全部放入其中,对吗?
这个在你写的时候追加,将矩阵追加到 mat 文件,而不是 mat 的变量。您的情况的唯一问题是加载原点矩阵o
,然后将矩阵附加到原点。例如,每次加载 'o' 然后附加 o1
就像 o = [o;o1]
。并为您想要的每个矩阵循环。
@lighting 是的。完全正确。以上是关于将循环迭代的矩阵保存在一个矩阵中的主要内容,如果未能解决你的问题,请参考以下文章