Octave中有没有一种方法只计算和存储矩阵乘积的对角线?
就像这样做:vector = diag(A*B);
我不关心A*B
中除了对角线上的值之外的任何值。矩阵大小大约为80k x 12
和12 x 80k
,即使我不关心速度/额外内存,它也无法适应RAM。
奇怪的是,Octave是一个处理大数据集的包,对角线非常重要,所以应该是可能的。
Octave中有没有一种方法只计算和存储矩阵乘积的对角线?
就像这样做:vector = diag(A*B);
我不关心A*B
中除了对角线上的值之外的任何值。矩阵大小大约为80k x 12
和12 x 80k
,即使我不关心速度/额外内存,它也无法适应RAM。
奇怪的是,Octave是一个处理大数据集的包,对角线非常重要,所以应该是可能的。
对角线上的第一个元素是矩阵A的第一行与矩阵B的第一列的点积。对角线上的第二个元素是矩阵A的第二行与矩阵B的第二列的点积。
换句话说:
vector = sum(A.*B',2);
这是在MATLAB中实现的方法(可能与Octave语法类似):
vector = sum(A.*B',2);
这将仅计算操作 A*B
的对角线作为列向量 vector
的结果。
实际上,我认为这是A的第一行与B的第一个列的点积...第二个对角线元素是第二行和第二列的点积...以此类推