【问题标题】:Fast way to compute only the diagonal of the square of a matrix仅计算矩阵平方的对角线的快速方法
【发布时间】:2015-07-30 07:46:08
【问题描述】:

我有一个nxm 矩阵V,我计算其中的平方S=V'*V。对于下面的计算,我只需要S 的对角线,所以我写了s=diag(V'*V)。但是,这有点浪费,因为我也在计算所有非对角线元素。是否有一种快速 方法来仅计算 S 的对角线元素?当然,我可以使用for 循环,但显式循环并不是在 MATLAB 中做事的快速方法。

【问题讨论】:

    标签: performance matlab matrix vectorization


    【解决方案1】:

    这很简单:

    sum(conj(v).*v,1)
    

    sum(abs(v).^2,1)
    

    如果矩阵是实数,可以简化为

    sum(v.*v,1)
    

    sum(v.^2,1)
    

    【讨论】:

    • :) 谢谢,伙计 - 我确信你会回答这个问题。你是我的官方bsxfun大师!我喜欢第三个,因为它基本上是矩阵乘积的定义。我实际上需要对角线作为列向量,所以我将其修改为sum(v.*v,1)',但除此之外它非常完美!!
    • @DeltaIV 看看这比你原来的解决方案快了多少会很有趣。
    • @DeltaIV 谢谢!不过这里不需要bsxfun :-)
    猜你喜欢
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2011-05-21
    • 2014-03-09
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多