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

时间:2015-10-17 23:32:33

标签: arrays matlab matrix-multiplication diagonal

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

我注意到人们会像sum((T*H).*T',2)这样做,这里是link。但要求T是方阵。在我的情况下,非方阵怎么样?

由于

1 个答案:

答案 0 :(得分:1)

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