Как вычислить только диагональ матричного произведения в октаве? - PullRequest
14 голосов
/ 20 февраля 2010

Есть ли в Octave способ вычислить и сохранить только диагональ матричного произведения?

В основном, как делать: vector = diag(A*B);

Мне наплевать на любые значения A*B, кроме значений по диагонали. Размеры матрицы составляют около 80k x 12 и 12 x 80k, поэтому, даже если бы я не заботился о скорости / дополнительной памяти, он просто не поместится в ОЗУ.

Странно, поскольку Octave - это пакет для огромных наборов данных, и диагонали очень важны, поэтому это должно быть возможно.

Ответы [ 3 ]

19 голосов
/ 20 февраля 2010

Первый элемент в диагонали - это скалярное произведение первой строки A с первым столбцом B. Второй элемент в диагонали - это скалярное произведение второй строки A со вторым столбцом B.

Другими словами:

vector = sum(A.*B',2);
9 голосов
/ 20 февраля 2010

Вот как вы могли бы сделать это в MATLAB (возможно, аналогично синтаксису Octave):

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

Это вычислит только результирующую диагональ операции A*B как вектор-столбец vector.

0 голосов
/ 20 февраля 2010

на самом деле я думаю, что это точечное произведение первой строки A с первым столбцом из B ... второй диагональный элемент является точечным произведением второй строки и второго столбца ... и т.д.

...