快速计算矩阵平方的对角线的方法

3

我有一个 nxm 的矩阵 V,我要计算它的平方 S=V'*V。接下来的计算中,我只需要 S 的对角线元素,所以我写成了 s=diag(V'*V)。然而,这有点浪费,因为我也在计算所有的非对角线元素。有没有一种快速的方法只计算 S 的对角线元素?当然,我可以使用 for 循环,但显式循环不是在 MATLAB 中执行任务的快速方式。

1个回答

5
很简单:
sum(conj(v).*v,1)

或者

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

如果矩阵是实数,您可以简化为:
sum(v.*v,1)

或者

sum(v.^2,1)

谢谢,伙计 - 我确信你会回答这个问题。你是我的官方 bsxfun 大师!我喜欢第三个,因为它基本上就是矩阵乘积的定义。实际上我需要对角线作为列向量,所以我将其修改为 sum(v.*v,1)',但除此之外它是完美的!! - DeltaIV
1
@DeltaIV,看到新方案的速度比你原来的解决方法快多少会很有趣。 - kkuilla
1
@DeltaIV 谢谢!这里不需要 bsxfun :-) - Luis Mendo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接