Let v
be a row vector (1 x n
matrix) and M
be a n x m
matrix.
I use the following piece of code to create a "weighted vector" (I hope the comments explain what it's supposed to be doing):
weighted_M = bsxfun(@times,v',M);
%creates a matrix with the i-th row of M being weighted (multiplied) by the i-th element of v
weighted_v = sum(weighted_M);
%sums the columns of weighted_M
Now the actual question: I have to do the same calculation for a lot of input vectors v
. So instead I would like to input a matrix V
that contains the vectors v
as rows and output a matrix that contains the weighted vectors as rows. Is there any way to do this without using for loops?
If V
is of size [k,n]
and M
is of size [n,m]
, and you're looking for the k
weighted vectors, then you might simply need
weighted_vs = V*M;
an element of which is equal to
weighted_vs_ij = (V*M)ij = sum_l V_il * M_lj
First you multiply each row of M
with a corresponding element of V
(V_il * M_lj
above for a fix i
), then sum up as a function of the first index.
The result are the k
weighted row vectors, each of length m
.