matlab - Sum of product each row by a matrix -


i have matrix a , three-dims matrix b. want sum (by i)

a(i,:)*b(i,:,:),

but without loops i.

i'll start creating random matrices similar described:

n = 4; m =3; = rand(n,m); b = rand(n,m,5); 

1) loop version:

c = zeros(1,size(b,3)); i=1:n     c = c + a(i,:)*squeeze(b(i,:,:)); end 

basically performs matrix multiplication of each row of a corresponding slice of b, , accumulates sum.

this slighty improved permuting matrix b once outside loop, avoiding multiple calls squeeze...

2) vectorized version:

c = sum(sum(bsxfun(@times, permute(a,[2 3 1]),  permute(b, [2 3 1])),1),3); 

i don't make claims should faster. in fact suspect looped version both faster , less memory intensive.

i'll leave compare 2 using actual dimensions working with.


Comments

Popular posts from this blog

java - activate/deactivate sonar maven plugin by profile? -

python - TypeError: can only concatenate tuple (not "float") to tuple -

java - What is the difference between String. and String.this. ? -