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.

 Akzeptierte Antwort

Matt J
Matt J am 25 Nov. 2014
Bearbeitet: Matt J am 25 Nov. 2014

0 Stimmen

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 Kommentar

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Matt J
Matt J am 25 Nov. 2014
Bearbeitet: Matt J am 25 Nov. 2014

0 Stimmen

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.

Kategorien

Gefragt:

am 25 Nov. 2014

Bearbeitet:

am 29 Nov. 2014

Community Treasure Hunt

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

Start Hunting!

Translated by