Мой вопрос похож на этот один, но я хотел бы воспроизвести каждый элемент согласно счетчику, указанному во втором массиве того же размера.
Пример этого, скажем, у меня есть массив v = [3 1 9 4]
, я хочу использовать rep = [2 3 1 5]
для репликации первого элемента 2 раза, второго три раза и так далее, чтобы получить [3 3 1 1 1 9 4 4 4 4 4]
.
Пока что я использую простой цикл для выполнения работы. Вот с чего я начал:
vv = [];
for i=1:numel(v)
vv = [vv repmat(v(i),1,rep(i))];
end
Мне удалось улучшить, предварительно выделив место:
vv = zeros(1,sum(rep));
c = cumsum([1 rep]);
for i=1:numel(v)
vv(c(i):c(i)+rep(i)-1) = repmat(v(i),1,rep(i));
end
Однако я все еще чувствую, что должен быть более умный способ сделать это ... Спасибо