Умножьте каждый элемент в матрице на каждый элемент в векторе - PullRequest
0 голосов
/ 23 октября 2018

У меня есть матрица mxn, M и вектор, b (длина c).Есть ли способ умножения каждого элемента M на каждый элемент вектора, чтобы получить результат mxnxc, т. Е. result(1, 1, :) is M(1, 1) .* b?

Для векторов использование поэлементных операторов работает,Например, если m = [a; b] и n = [c d], то a .* b дает

a*c  a*d
b*c  b*d

, но для матриц это будет выполнять поэлементную или столбцовую операцию для матрицы в зависимости от того, n - вектор столбца или строки.Например, если m = [ a b; c d ] и n = [ e f ], то m .* n дает

a*e  b*f
c*e  d*f

, в то время как результат, который я ищу, будет result(:, :, 1) =

a*e  b*e
c*e  d*e

и result(:, :, 2) =

a*f  b*f
c*f  d*f

Я знаю, что это может быть достигнуто с помощью цикла,

result = zeros(m, n, c);
for i = 1:b
  result(:, :, i) = M .* b(i); 
end

, но мне интересно, есть ли более простой, то есть более MATLAB/Octave (обычно более читаемый и производительный)Кстати, делать это.

1 Ответ

0 голосов
/ 23 октября 2018

Вам нужно только переставить / изменить b вдоль третьего измерения, и пусть неявное расширение сделает свое дело:

result = M.*reshape(b,1,1,[]);

Для более старых версий Matlab используйте bsxfun:

result = bsxfun(@times, M, reshape(b,1,1,[]));
...