Generating a long vector from two other vectors

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 ...

 Réponse acceptée

Azzi Abdelmalek
Azzi Abdelmalek le 22 Juil 2015
Modifié(e) : Azzi Abdelmalek le 22 Juil 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 commentaire

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)) )?

Connectez-vous pour commenter.

Plus de réponses (1)

Catégories

En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by