repelem substitute for older matlab version
    9 views (last 30 days)
  
       Show older comments
    
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 Comment
  Stephen23
      
      
 on 24 Jun 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?
Answers (2)
  Stephen23
      
      
 on 24 Jun 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
      
      
 on 24 Jun 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 Comments
  Stephen23
      
      
 on 24 Jun 2017
				Expanding arrays within loops is not recommended:
See my answer for a one-line solution that does not expand arrays inside loops.
  KSSV
      
      
 on 24 Jun 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{:}]
See Also
Categories
				Find more on Logical 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!