【发布时间】: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
我有一个 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
您可以为 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 到产品的结果。
【讨论】:
假设,如Geoff's answer,你的意思是A(i,:)'*A(i,:)(在你的例子中得到5个大小为3x3的矩阵),你可以在一行中使用bsxfun和permute:
AA = bsxfun(@times, permute(A, [3 2 1]), permute(A, [2 3 1]));
(我还假设您的矩阵仅包含实数,如您的示例所示。如果 ' 您的意思是 conjugate 转置,则需要在以上)。
【讨论】: