Expand vector along third dimension

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.

 Risposta accettata

Matt J
Matt J il 25 Nov 2014
Modificato: Matt J il 25 Nov 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 Commento

Matt J
Matt J il 29 Nov 2014
Modificato: Matt J il 29 Nov 2014
Henrik's comment moved from an "Answer" to here:
That is one sexy line of code :D Thanks!

Accedi per commentare.

Più risposte (1)

Matt J
Matt J il 25 Nov 2014
Modificato: Matt J il 25 Nov 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.

Categorie

Richiesto:

il 25 Nov 2014

Modificato:

il 29 Nov 2014

Community Treasure Hunt

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

Start Hunting!

Translated by