MATLAB: Multiply each element of a vector with a matrix

element-wisemultiplication

I want to multiply each element of a vector with a matrix such that I end up with a 3D matrix (or higher dimentions).
For example if A is a vector and B is a matrix I would write:
for indx=1:length(A)
result(:,:,indx)=A(indx).*B
end
Is for-loops the way to go here or are there any better solutions?

Best Answer

BSXFUN!!!
B = [1 2; 3 4];
A = 1:5;
D = bsxfun(@times,B,reshape(A,1,1,numel(A)));
kron is notorious (at least in older versions) for being very slow.
And obligatory timings:
B = repmat([1 2; 3 4],10,10);
A = 1:50;
t1 = 0;
t2 = 0;
t3 = 0;
for ii = 1:100
tic
C = reshape(kron(A,B),[size(B),numel(A)]);
t1=t1+toc;
tic
D = bsxfun(@times,B,reshape(A,1,1,numel(A)));
t2=t2+toc;
tic
for indx = length(A):-1:1 % Backwards for pre-allocation
result(:, :, indx) = A(indx) .* B;
end
t3=t3+toc;
end
isequal(C,D,result)
[t1 t2 t3]
%{
ans =
1
ans =
0.0128 0.0069 0.0098
%}