У меня есть вектор 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
]
С уважением
У меня есть вектор 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
]
С уважением
Вы можете использовать bsxfun:
A=[1 2 3]'
B=[4 5 6]
bsxfun(@plus, A, B)
Результат
ans =
5 6 7
6 7 8
7 8 9
bsxfun во много раз быстрее, чем умножение матриц, для всех размеров вектора, которые я тестировал. Так и должно быть, поскольку вычислительная сложность умножения суперлинейна по количеству матричных элементов.
- person Isaac; 28.07.2012
bsxfun превосходит ваш альтернативный подход для больших матриц (я тестировал с A и B, имеющими по 1000 элементов каждый).
- person H.Muster; 28.07.2012
Вы можете использовать функцию repmat (реплицировать матрицы):
repmat(A,1,3)+repmat(B,3,1)
Из R2016b вы можете просто сделать:
A=[1 2 3]'
B=[4 5 6]
A+B
ans =
5 6 7
6 7 8
7 8 9
Matlab молча расширит оба вектора и выполнит поэлементную сумму. Эта функция не обошлась без споров. Вы можете проверить детали здесь: