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).
Пантелис Сопасакис

Ответы:

140

Функция, которую вы ищете repmat().

v10 = repmat(v, 1, 5)
Эндрю Шеперд
источник
1
ссылка на
октавную
6

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

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

 v10=v(repmat(1:length(v),1,5))
Деннис Джахеруддин
источник