Возможно, вам понадобится более неясная функция Matlab bsxfun . Из документации Matlab, bsxfun "применяет бинарную операцию элемент за элементом, заданную функцией fun дескриптора функции, к массивам A и B с включенным одноэлементным расширением."
@ gnovice, как указано выше, сумма и другие базовые функции уже работают с первым не-одиночным измерением (т. Е. Строки, если имеется более одной строки, столбцы, если есть только одна строка, или более высокие измерения, если все нижние измерения имеют размер == 1). Однако bsxfun работает с любой функцией, включая (и особенно) пользовательские функции.
Например, допустим, у вас есть матрица A и вектор строки B. Например, скажем:
A = [1 2 3;
4 5 6;
7 8 9]
B = [0 1 2]
Требуется функция power_by_col, которая возвращает в векторе C все элементы в A в степень соответствующего столбца B.
Из приведенного выше примера C представляет собой матрицу 3x3:
C = [1^0 2^1 3^2;
4^0 5^1 6^2;
7^0 8^1 9^2]
т.е.,
C = [1 2 9;
1 5 36;
1 8 81]
Вы можете сделать это методом грубой силы, используя repmat:
C = A.^repmat(B, size(A, 1), 1)
Или вы можете сделать это классным способом, используя bsxfun, который внутренне заботится о шаге repmat:
C = bsxfun(@(x,y) x.^y, A, B)
Таким образом, bsxfun экономит вам несколько шагов (вам не нужно явно вычислять размеры A). Однако в некоторых моих неофициальных тестах выясняется, что repmat примерно в два раза быстрее, если функция, которую нужно применить (например, моя функция мощности, выше), проста. Так что вам нужно будет выбрать простоту или скорость.