Подтвердить что ты не робот

Как вычислить только диагональ матричного произведения в Октаве?

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

В принципе, как делать: vector = diag(A*B);

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Вот как вы могли бы это сделать в MATLAB (вероятно, похоже на синтаксис Octave):

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

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

Ответ 3

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