2013-05-06 2 views
1

Пусть у меня есть матрица A = рандов (2,14,24) и вектор х = 10 * одни (1,14)поэлементно умножение матрицы на вектор

Я хочу поэлементно умножение и x, для которых B (i, j, k) = A (i, j, k) * x (j) для всех j = 1,2, ... 14. Я хочу, чтобы это было возможно без запуска цикла. Каков наиболее эффективный способ сделать это в Matlab?

ответ

1

Вы сначала используете repmat для плитки x правильное количество раз, затем выполните умножение по элементам.

repX = repmat(x, [size(A, 1), 1, size(A, 3)]); 
B = A.*repX; 
7

Если вы умножая A вектором 10 по поэлементно, не было бы проще просто умножить на скалярном вместо этого?

B = A * 10; 

Для общего случая, нет необходимости repmat логики здесь. bsxfun может сделать трюк (и это быстрее). :

B = bsxfun(@times, A, x); 
+0

Мне нужно общее решение. Я прочитал страницу bsxfun в MathWorks, но я не могу понять, как указать правильные индексы умножаются? – skr

+1

@skr Это _is_ общее решение, и вам не нужно ничего указывать. 'bsxfun' автоматически реплицирует меньшую матрицу (в нашем случае' x') по всем не-singelton размерности большей матрицы (в нашем случае 'A'). Поэтому, если 'x' является вектором строки, он будет _automatically_ реплицироваться по первому и третьему измерениям. –

 Смежные вопросы

  • Нет связанных вопросов^_^