Generating a long vector from two other vectors

3 views (last 30 days)
I got stuck with a (may be) simple problem. Here are two vectors, like:
a = [20 13 24 ...];
b = [3 2 4 ...];
How can I create a new vector that contains 3 20s, 2 13s, 4 24s, and so on? (Not using any loop). The output will look like as shown in c:
c =
20 20 20 13 13 24 24 24 24 ...

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 22 Jul 2015
Edited: Azzi Abdelmalek on 22 Jul 2015
a = [20 13 24 ];
b = [3 2 4 ];
out=cell2mat(arrayfun(@(x,y) repmat(x,1,y),a,b,'un',0))
or with a for loop
a = [20 13 24 ];
b = [3 2 4 ];
out=zeros(1,numel(a))
c=[ 0 cumsum(b)]
for k=1:numel(a)
out(c(k)+1:c(k+1))=a(k)*ones(1,b(k))
end
  1 Comment
Shoaibur Rahman
Shoaibur Rahman on 22 Jul 2015
Thanks a lot. It works. I read the docs of functions you have used, but was not clear about how it is working. Could you please explain the the command in brief ( out=cell2mat(arrayfun(@(x,y) repmat(x,1,y),a,b,'un',0)) )?

Sign in to comment.

More Answers (1)

Steven Lord
Steven Lord on 22 Jul 2015
v = repelem([20 13 24], [3 2 4])

Categories

Find more on Multidimensional Arrays in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!