Borrar filtros
Borrar filtros

Expand vector along third dimension

28 visualizaciones (últimos 30 días)
Henrik Dam
Henrik Dam el 25 de Nov. de 2014
Editada: Matt J el 29 de Nov. de 2014
My question is simply, but I cannot figure out how to do it.
Assume I have a vector K=[K_1,..,K_n] then I would like to create a three dimensional matrix M with first dimension equal to x, second dimension equal to y and third dimension equal to n such that M(:,:,1)=K1*ones(x,y), M(:,:,2)=K2 * ones(x,y) etc. I know of course I can loop, but I am expecting a neat one-liner exists.

Respuesta aceptada

Matt J
Matt J el 25 de Nov. de 2014
Editada: Matt J el 25 de Nov. de 2014
I have a matrix S which is x times y. Then I would subtract each element of K (what I wanted to use the extra dimension for), take the positive part (i.e. max of the result and 0) and sum out the first dimension x to get a y times n matrix.
K=reshape(K,1,1);
result = squeeze( sum( max( bsxfun(@minus,S,K), 0), 1 ) )
  1 comentario
Matt J
Matt J el 29 de Nov. de 2014
Editada: Matt J el 29 de Nov. de 2014
Henrik's comment moved from an "Answer" to here:
That is one sexy line of code :D Thanks!

Iniciar sesión para comentar.

Más respuestas (1)

Matt J
Matt J el 25 de Nov. de 2014
Editada: Matt J el 25 de Nov. de 2014
but I am expecting a neat one-liner exists.
It does
M=repmat( reshape(K,1,1,[]), x, y);
but it is often better to use BSXFUN when applicable. That way you don't have to allocate any actual memory for duplicate data.

Categorías

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

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by