在Matlab中存储来自循环的矩阵

时间:2014-05-03 19:21:43

标签: arrays matlab for-loop matrix

我有一个5乘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矩阵中的每一个?

感谢。

2 个答案:

答案 0 :(得分: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 对产品的结果

答案 1 :(得分:0)

假设,与Geoff's answer中一样,您的意思是A(i,:)'*A(i,:)(在您的示例中获得5个大小为3x3的矩阵),您可以使用bsxfun和{{ 3}}:

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

(我还假设你的矩阵只包含实数,如你的例子所示。如果'你的意思是共轭转置,你需要添加一个{上面的{1}}。