In Matlab one can write c = 3; % (some scalar) x = 0:10; % (some vector) y = c * x; % (multiply every component of x with c)
This is much faster than using a for loop and writing for k = 1:length(x) y(k) = c * x(k); end
I would now like to do a similar thing, but where the scalar is replaced by a n x 1 vector and the vector is replaced by a n x m matrix. I.e., I would like to multiply each column of a matrix pointwise with a column vector.
So far I can see two solutions for this (besides a double for loop):
1. Use repmat to create m copies of the colum vector and multiply the resulting matrix pointwise with the original matrix:
% Given a vector v (n x 1) and matrix A (n x m): V = repmat(v, 1, m); B = A .* V;
2. Use a for loop to go through each element of the vector and thus reduce to the problem to the <scalar> * <vector> situation:
for k = 1:length(v) B(1, :) = A(1, :) * v(k); end
I have found the second solution to be faster than the first one. Is there a better solution?