2012-07-27 7 views
0

У меня есть вектор nx1 и вектор 1xn. Я хочу, чтобы добавить их в особом порядке, как умножение матриц эффективным образом (векторизованную):Как добавить вектор строки к вектору столбца, как умножение матрицы

Пример:

A=[1 2 3]' 

B=[4 5 6] 

A \odd_add B = 
[1+4 1+5 1+6 
2+4 2+5 2+6 
3+4 3+5 3+6 
] 

С уважением

ответ

1

Вы можете использовать bsxfun:

A=[1 2 3]' 

B=[4 5 6] 

bsxfun(@plus, A, B) 

Результат

ans = 

    5  6  7 
    6  7  8 
    7  8  9 
+0

Спасибо, я надеюсь, что решение должно быть достаточно быстро. – remo

+0

Как я его протестировал, он примерно в 6 раз медленнее обычного умножения матрицы. Я использовал exp (A) и exp (B) и умножил их, а затем получил специальное суммирование с использованием функции log(). Этот подход быстрее! Может ли ваш код быть векторизованным? – remo

+0

Я не согласен с вашими испытаниями; Я нахожу 'bsxfun' во много раз быстрее, чем умножение матрицы, для всех размеров вектора, который я тестировал. Это должно быть так, поскольку вычислительная сложность умножения является суперлинейной по числу матричных элементов. – Isaac

0

Вы можете использовать функцию repmat (реплицировать матрицы):

repmat(A,1,3)+repmat(B,3,1) 
Смежные вопросы