【问题标题】:Multiply each element of a column with other elements of the same column将列的每个元素与同一列的其他元素相乘
【发布时间】:2016-02-16 06:59:23
【问题描述】:

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

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您正在寻找的是"outer product"。对于带有n 元素的列向量v,外积的大小为n-by-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
    

    【讨论】:

    • 谢谢,我试试看。
    • 它是否适用于更大的 500×90 矩阵以形成 250000×90 矩阵。在此期间,我正在尝试理解您的代码,所以只是问了一下。
    • @user5933603 就代码而言,它可以与任何二维矩阵 A 一起使用。我怀疑你会遇到非常大的矩阵的内存问题。
    • 好的,我将尝试减小大小或在具有更多内存的 Linux 集群上处理它。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2023-03-14
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多