【问题标题】:Matlab saving for loop dataMatlab保存循环数据
【发布时间】:2016-03-11 13:24:35
【问题描述】:

我有一个类似的功能

 for i = 1:n
     [A,B] = generatecomp(i, a, b);
 end

我想保存这些 n x 1 矩阵的 A 和 B 值。 我尝试使用以下代码解决问题:

A=[];
B=[];
    for i=1:n
    [A1,B1] = generatecomp(i, a, b);
    A=[A;A1]
    B=[B,B1]
    end
save('ABval.mat','A','B')

但问题是矩阵的长度随着“n”值的变化而变化。如何将所有 A 和 B 值保存在同一个 .mat 文件中?

【问题讨论】:

    标签: matlab loops for-loop save


    【解决方案1】:

    如果您希望将AB 的所有中间值保存在文件中,则需要将save 调用放在 for 循环中。

    for k = 1:n
        [A1,B1] = generatecomp(k, a, b);
        A=[A,A1]
        B=[B,B1]
        filename = sprintf('ABval%d.mat', k);
        save(filename, 'A', 'B')
    end
    

    或者,如果您希望它们都在同一个文件中,那么您可以将中间值存储在一个元胞数组中(这样做的额外好处是它们不必一定是相同的维度),然后保存整个元胞数组到文件中。

    % Cell arrays to store intermediate values
    A = cell(1, n);
    B = cell(1, n);
    
    for k = 1:n
        [A{k}, B1{k}] = generatecomp(k, a, b);
    end
    
    save('ABvals.mat', 'A', 'B')
    

    【讨论】:

    • 对不起,我在这里写错了。它在循环中。问题是 As 和 Bs 的大小不同,它说 Error using vertcat 被连接的矩阵的尺寸不一致。我的问题是如何解决它
    • @user70299 这个错误很可能是因为你写的是[A;A1]而不是[A,A1](注意分号和逗号)
    • @user70299 我的第二个解决方案也可以解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    相关资源
    最近更新 更多