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

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 是的。完全正确。

以上是关于将循环迭代的矩阵保存在一个矩阵中的主要内容,如果未能解决你的问题,请参考以下文章

使用 for 循环迭代空矩阵

OpenCV 矩阵运算是不是比简单的循环迭代更快?

如何为特征矩阵创建STL输出迭代器?

所有迭代后的 Python 保存矩阵

在 C++ 中迭代具有可变维度大小的 N 维矩阵

对于循环和矩阵迭代问题:TypeError:无法读取未定义的属性“0”