Naurgul
Naurgul

Reputation: 231

Multiplying each element of a vector with a matrix

I have a vector v and a matrix M. I want to multiply each element of v with M and then sum all the resulting matrices.

for i=1:length(v)
    lala(:,:,i) = v(i).*M;
end
sum(lala, 3)

Is it possible to do this without a for loop?

Upvotes: 1

Views: 432

Answers (2)

Yanshuai Cao
Yanshuai Cao

Reputation: 1297

I think Danil Asotsky's answer is correct. He's exploiting the the linearity of the operation here. I just want to give another solution, using use the Kronecker tensor product, that does not dependent on this linearity property, hence still works with operation other than sum:

kvM = kron(v,M);
result = sum(reshape(kvM,[size(M) numel(v)]),3)

It's too late at my local time, and I dont feel like explaining the details of why this works, if you can't figure out from matlab help and wikipedia, then comment below and I'll explain for you.

Upvotes: 3

Danil Asotsky
Danil Asotsky

Reputation: 1241

Do you have single matrix M that don't depend from i? In this case sum(v(i) * M) = sum(v(i)) *M.

E.g you will have expected result for code:

v_sum = sum(v);
lala_sum = v_sum * M;

Upvotes: 2

Related Questions