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
我有两个矩阵,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