Comma separated list generation

2 views (last 30 days)
Jan
Jan on 22 Jun 2011
Edited: Stephen23 on 22 Feb 2024
How can you expand a comma separated list from a repetition? I am searching for the elegant way to do something like this:
Instead of
Y = blkdiag(X, X, X),
write Y = repblkdiag(X,3). The code I use now is:
function Y = repblkdiag(X, n)
Y = [];
for j = 1:n
Y = blkdiag(Y, X);
end
I expected that something like
Y = blkdiag(deal(repmat(X,3)))
would work. Thanks for your interest and contribution,
Jan

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 22 Jun 2011
xc = repmat({X},1,3)
Y = blkdiag(xc{:})
  4 Comments
Teja Muppirala
Teja Muppirala on 22 Jun 2011
It is possible to do it in one line, but I think Andrei's solution is simpler.
Y = eval(['blkdiag( ' repmat('X,',1,3) '[])'])
Stephen23
Stephen23 on 22 Feb 2024
Edited: Stephen23 on 22 Feb 2024
Another neat approach:
C = {X};
Y = blkdiag(C{[1,1,1]})
One line (since R2019b):
Y = blkdiag(struct('x',repmat({X},1,3)).x)
... but I recommend using two lines.

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!