如果A是我拥有的矩阵,我想通过将列的每个元素与列的每个其他元素相乘(逐个)来获得矩阵B.并将结果存储在单独的矩阵中。因此,如果A是3x3矩阵,则会产生B为9x3矩阵。
我使用了以下循环代码,但它只给出了最终迭代的结果。
for j = [1:3]
for i=1:3
B(:,j)= A(i,j) .* A(:,j);
end
end
请你建议我怎么做。感谢
A= 1 3 7
2 4 8
3 5 9
B= 1 9 49
2 12 56
3 15 63
2 12 56
4 16 64
6 20 72
3 15 63
6 20 72
9 25 81
答案 0 :(得分:2)
您要找的是"outer product"。对于包含v
元素的列向量n
,外部产品的大小为n
- 按 - n
:
o = v*v'
其中o(ii,jj)
是v(ii)*v(jj)
的产品。
要对矩阵的所有列执行此操作,您可以使用bsxfun:
o = reshape(bsxfun(@times,permute(A,[1 3 2]),permute(A,[3, 1, 2])),[],size(A,2))
对于示例输入矩阵A = [1 3 7;2 4 8; 3 5 9]
,输出o
为:
1 9 49
2 12 56
3 15 63
2 12 56
4 16 64
6 20 72
3 15 63
6 20 72
9 25 81