如何在Octave中仅计算矩阵乘积的对角线?

15

Octave中有没有一种方法只计算和存储矩阵乘积的对角线?

就像这样做:vector = diag(A*B);

我不关心A*B中除了对角线上的值之外的任何值。矩阵大小大约为80k x 1212 x 80k,即使我不关心速度/额外内存,它也无法适应RAM。

奇怪的是,Octave是一个处理大数据集的包,对角线非常重要,所以应该是可能的。

3个回答

22

对角线上的第一个元素是矩阵A的第一行与矩阵B的第一列的点积。对角线上的第二个元素是矩阵A的第二行与矩阵B的第二列的点积。

换句话说:

vector = sum(A.*B',2);

1
我看到你很好地利用了5分钟的编辑宽限期。 ;) - gnovice
我很高兴有宽限期存在。似乎只有在提交后我才能看到我的主要错误。 :) - Jonas

11

这是在MATLAB中实现的方法(可能与Octave语法类似):

vector = sum(A.*B',2);

这将仅计算操作 A*B 的对角线作为列向量 vector 的结果。


0

实际上,我认为这是A的第一行与B的第一个的点积...第二个对角线元素是第二行和第二列的点积...以此类推


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