【问题标题】:Store matrix from a loop in Matlab在 Matlab 中存储循环中的矩阵
【发布时间】:2014-05-03 19:21:42
【问题描述】:

我有一个 5 x 3 矩阵,例如:

A=[1 1 1; 2 2 2; 3 3 3; 4 4 4; 5 5 5]

我运行了一个 for 循环:

for i = 1:5
    AA = A(i)'*A(i);
end

我的问题是如何存储 5 个(3 乘 3)AA 矩阵中的每一个?

谢谢。

【问题讨论】:

    标签: arrays matlab for-loop matrix


    【解决方案1】:

    您可以为 AA 矩阵预先分配足够的内存来保存所有结果:

    [r,c] = size(A);   % get the rows and columns of A (r and c respectively)
    AA = zeros(c,c,r); % pre-allocate memory to AA for all 5 products 
                       % (so we have 5 3x3 arrays)
    

    现在执行与上面几乎相同的循环,但要意识到上面代码中的 A(i) 只返回一个元素,而您想要整行。所以你想要来自行 i 的数据,但所有列都可以表示为 1:3 或只是冒号 :

    for i=1:r
        AA(:,:,i) = A(i,:)' * A(i,:);
    end
    

    在上面,A(i,:)A 的第 i 行,我们将所有行和列设置在第三维(i ) 的 AA 到产品的结果。

    【讨论】:

    • 谢谢杰夫。我不知道如何在三维空间中操作。这真的解决了问题。祝你有美好的一天。
    【解决方案2】:

    假设,如Geoff's answer,你的意思是A(i,:)'*A(i,:)(在你的例子中得到5个大小为3x3的矩阵),你可以在一行中使用bsxfunpermute

    AA = bsxfun(@times, permute(A, [3 2 1]), permute(A, [2 3 1]));
    

    (我还假设您的矩阵仅包含实数,如您的示例所示。如果 ' 您的意思是 conjugate 转置,则需要在以上)。

    【讨论】:

    • 谢谢路易斯。您的回答也起到了作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多