Question

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.

Was it helpful?

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);

OTHER TIPS

This is how you could do it in MATLAB (probably similar to Octave syntax):

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

This will compute only the resulting diagonal of the operation A*B as a column vector vector.

actually I think it's the dot product of the first row of A with the first column of B... the second diagonal element is the dot product of the second row and the second column... etc

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top