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的第一列的点积......第二个对角线元素是第二行和第二列的点积......等等