Search code examples
matlabmatrixoctavematrix-multiplicationdiagonal

How to compute only the diagonal of a matrix product in Octave?


Is there a way in Octave to compute and store only the diagonal of a matrix product?

Basically like doing: vector = diag(A*B);

I don't care about any of the values of A*B except those on the diagonal. The matrix sizes are around 80k x 12 and 12 x 80k, so even if I didn't care about the speed/extra memory it simply wont fit in RAM.

Strange, since Octave is a package for huge data sets and diagonals are very important, so it should be possible.


Solution

  • The first element in the diagonal is the scalar product of the first row of A with the first column of B. The second element in the diagonal is the scalar product of the second row of A with the second column of B.

    In other words:

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