Matlab 有效地取矩阵乘积的对角线值

Matlab efficiently take diagonal values of a matrix product

我有两个矩阵,a是2000乘20000,b也是2000乘20000。我想得到a'*b的对角线元素。我使用 diag(a'*b) 但它非常慢(大约 20 秒),因为计算非对角线元素需要时间。我想知道是否有更快的方法来做到这一点。

我注意到人们在做类似 sum((T*H).*T',2) 的事情,这里是 link。但要求T是方阵。在我的例子中非方阵怎么样?

谢谢

a'*b的对角线正好是

result = sum(a'.*b.',2);

示例(非方矩阵):

>> a = rand(4,5);
>> b = rand(4,5);
>> result = sum(a'.*b.',2)
result =
    1.6102
    0.2805
    1.5354
    0.3966
    1.1896

>> diag(a'*b)
ans =
    1.6102
    0.2805
    1.5354
    0.3966
    1.1896