Octave / Matlab: растянуть вектор, заставив его повторяться?


93

Есть ли способ расширить вектор, заставив его повторяться?

>v = [1 2];
>v10 = v x 5; %x represents some function. Something like "1 2" x 5 in perl

Тогда v10 будет:

>v10
     1 2 1 2 1 2 1 2 1 2

Это должно работать в общем случае, а не только для [1 2]


Вы можете использовать kron - оператор продукта Kroencker. например, v=[1 2]и v100=kron(ones(1,100),v)является вектором v100=[v v ... v](100 раз). Если вы хотите объединить некоторый вектор-столбец yс самим собой Kразом, используйте yK=kron(ones(K,1),y).
Пантелис Сопасакис

Ответы:



6

Очевидно, что repmat - это правильный путь, если вы знаете, в каком направлении вы хотите расширить вектор.

Однако, если вам нужно общее решение, которое всегда повторяет вектор в самом длинном направлении, эта комбинация repmat и индексации должна помочь:

 v10=v(repmat(1:length(v),1,5))
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.