将列的每个元素与同一列的其他元素相乘

时间:2016-02-16 06:59:23

标签: matlab

如果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

1 个答案:

答案 0 :(得分:2)

您要找的是"outer product"。对于包含v元素的列向量n,外部产品的大小为n - 按 - n

o = v*v'

其中o(ii,jj)v(ii)*v(jj)的产品。

要对矩阵的所有列执行此操作,您可以使用

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