repelem substitute for older matlab version
10 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentario
Stephen23
el 24 de Jun. de 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?
Respuestas (2)
Stephen23
el 24 de Jun. de 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
el 24 de Jun. de 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 comentarios
Stephen23
el 24 de Jun. de 2017
Expanding arrays within loops is not recommended:
See my answer for a one-line solution that does not expand arrays inside loops.
KSSV
el 24 de Jun. de 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{:}]
Ver también
Categorías
Más información sobre Matrices and Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!