Generating a long vector from two other vectors

2 Ansichten (letzte 30 Tage)
Shoaibur Rahman
Shoaibur Rahman am 22 Jul. 2015
Kommentiert: Shoaibur Rahman am 22 Jul. 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 ...

Akzeptierte Antwort

Azzi Abdelmalek
Azzi Abdelmalek am 22 Jul. 2015
Bearbeitet: Azzi Abdelmalek am 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 Kommentar
Shoaibur Rahman
Shoaibur Rahman am 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)) )?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

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

Kategorien

Mehr zu Multidimensional Arrays finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by