Generating a long vector from two other vectors

2 vues (au cours des 30 derniers jours)
Shoaibur Rahman
Shoaibur Rahman le 22 Juil 2015
Commenté : Shoaibur Rahman le 22 Juil 2015
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
Shoaibur Rahman
Shoaibur Rahman le 22 Juil 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)) )?

Connectez-vous pour commenter.

Plus de réponses (1)

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

Catégories

En savoir plus sur Multidimensional Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by