Vectorizing a funky matrix multiplication

I have two matrices H and W, where H is Nx1873 and W is 262144xN (N is a small integer, usually 10-20). I multiply these matrices using the following code:
comp = zeros([512 512 1873 N]);
for i = 1:N
comp(:,:,:,i) = reshape(W(:,i)*H(i,:),[512 512 1873]);
end
Is there a way to vectorize this operation?

1 comentario

Matt J
Matt J el 22 de Jun. de 2017
If N is a small integer, vectorization will probably not make much difference.
Also, the operation itself seems like a bad idea. I don't know what you're planning to do with all of those outer products comp(:,:,:,i), but in most situations there are efficient ways to manipulate outer-products without computing them directly. They consume a lot of memory in spite of containing very little information.

Iniciar sesión para comentar.

Respuestas (1)

Matt J
Matt J el 22 de Jun. de 2017
Editada: Matt J el 22 de Jun. de 2017
Wr=reshape(W,[],1,N);
Hr=reshape(H.',1,[],N);
comp=reshape( bsxfun(@times, Wr,Hr), 512,512,[]);

2 comentarios

Matt J
Matt J el 22 de Jun. de 2017
If N is a small integer, vectorization will probably not make much difference.
Also, the operation itself seems like a bad idea. I don't know what you're planning to do with all of those outer products comp(:,:,:,i), but in most situations there are efficient ways to manipulate outer-products without computing them directly. They consume a lot of memory in spite of containing very little information.
David Thibodeaux
David Thibodeaux el 22 de Jun. de 2017
I'm using H and W as outputs of either nnmf() or lsqnonneg(), and creating matrices that represent each of the N components individually for my original 512x512x1873 dataset. I use this to create movies where each component can be color coded, to aid in visualizing my data. I'm not sure how else I can organize the data, since I need to again matrix multiply it by my colormap as a final step, and visualize all components at once for each timepoint.
Thanks for your answer, I will try it ans see if there is any improvement!

Iniciar sesión para comentar.

Categorías

Productos

Preguntada:

el 22 de Jun. de 2017

Comentada:

el 22 de Jun. de 2017

Community Treasure Hunt

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

Start Hunting!

Translated by