2010-02-20 125 views
13

Octave有没有计算和存储矩阵乘积的对角线的方法?如何仅计算Octave中矩阵乘积的对角线?

基本上像做:vector = diag(A*B);

我不关心任何的A*B除对角线上的值。矩阵大小大约为80k x 1212 x 80k,所以即使我不在乎速度/额外的内存,它也不适合RAM。

奇怪的是,由于Octave是一个庞大的数据集和对角线的包非常重要,所以它应该是可能的。

回答

17

对角线中的第一个元素是A的第一行和B的第一列的标量乘积。对角线中的第二个元素是A的第二行和B的第二列的标量乘积。

换句话说:

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

我看到你很好地利用了5分钟的宽限期进行编辑。 ;) – gnovice 2010-02-20 04:53:31

+0

我很高兴宽限期存在。我似乎只在我提交时看到我的重大错误。 :) – Jonas 2010-02-20 12:46:45

9

这是你如何能做到这一点在MATLAB(可能是类似于八度语法):

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

这只会计算操作A*B的结果对角线作为列向量vector

0

其实我认为这是一个的第一行与第一B柱的点积...第二对角线元素是第二行第二列的点积...等

+0

是的。我输错了。 – Jonas 2010-02-20 04:48:49