Elemental matrix multiplication [NxN] and [1xn] into [NxNxn]

5 visualizaciones (últimos 30 días)
William
William el 31 de Mzo. de 2014
Comentada: William el 31 de Mzo. de 2014
Hi,
I want to multiply every element in A[NxN] by every value in B[1xn] to get C[NxNxn]
Current code:
for i = 1:n
c(:,:,i) = b(i) * a(:,:)
end
Is it possible to do this without the for loop to make it run faster?
Many thanks,

Respuesta aceptada

Azzi Abdelmalek
Azzi Abdelmalek el 31 de Mzo. de 2014
Editada: Azzi Abdelmalek el 31 de Mzo. de 2014
a=rand(4,3)
b=rand(1,6)
[n,m]=size(a)
p=numel(b);
c=reshape(bsxfun(@times, repmat(a(:)',numel(b),1),b')',n,m,p)
  2 comentarios
John D'Errico
John D'Errico el 31 de Mzo. de 2014
Editada: John D'Errico el 31 de Mzo. de 2014
That seems overly difficult the way you did it. Cleaner is just to reshape B first, THEN use bsxfun. No need at all to use repmat!
C = bsxfun(@times,A,reshape(B,[1,1,numel(B)]));
The idea is that BSXFUN will implicitly replicate as necessary those dimensions that are singleton (i.e., have a 1 in them.)
William
William el 31 de Mzo. de 2014
That's great, faster now. Many thanks

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Logical en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by