我有一个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
矩阵中的每一个?
感谢。
答案 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}}。