repelem substitute for older matlab version

11 visualizzazioni (ultimi 30 giorni)
MiauMiau
MiauMiau il 24 Giu 2017
Commentato: KSSV il 24 Giu 2017
Hi,
I want to do the following (what usually repelem does, however an older version of Matlab does not seem to have it):
Given vector a = [3 45 6 ];
I would want for instance its first element to be repeated 2 times, the second 4 times, the third element once (just as an example). So we would end up with:
aNew = [3 3 4 45 45 45 6 6];
How can that be done in a systematic way without repelem?
Thanks
  1 Commento
Stephen23
Stephen23 il 24 Giu 2017
You say that you want "the third element once", but it appears twice in your example. Which is correct? Where does that 4 come from?

Accedi per commentare.

Risposte (2)

Stephen23
Stephen23 il 24 Giu 2017
>> A = [3,45,6];
>> R = [2,4,1];
>> cell2mat(arrayfun(@(a,r)repmat(a,1,r),A,R,'uni',0))
ans =
3 3 45 45 45 45 6

KSSV
KSSV il 24 Giu 2017
a = [3 45 6 ];
aNew = [3 3 45 45 45 45 6 6];
R = [2 4 3] ;
iwant = [] ;
for i = 1:length(R)
iwant = [iwant ones(1,R(i))*a(i)] ;
end
  2 Commenti
Stephen23
Stephen23 il 24 Giu 2017
Expanding arrays within loops is not recommended:
See my answer for a one-line solution that does not expand arrays inside loops.
KSSV
KSSV il 24 Giu 2017
a = [3 45 6 ];
aNew = [3 3 45 45 45 45 6 6];
R = [2 4 3] ;
iwant = cell(1,length(R)) ;
for i = 1:length(R)
iwant{i} = ones(1,R(i))*a(i) ;
end
iwant = [iwant{:}]

Accedi per commentare.

Categorie

Scopri di più su Matrices and Arrays in Help Center e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by