Скажем, у меня есть одномерный массив:
a = [1, 2, 3];
Есть ли встроенная функция Matlab, которая берет массив и целое число n
и копирует каждый элемент массива n времена?
Например, вызов replicate(a, 3)
должен возвратиться [1,1,1,2,2,2,3,3,3]
.
Обратите внимание, что это нисколько не то же как repmat
. Я могу, конечно, реализовать replicate
путем выполнения repmat
на каждом элементе и конкатенации результата, но я задаюсь вопросом, существует ли созданный в функции, которая более эффективна.
a = [1 2 3];
N = 3;
b = reshape(repmat(a,N,1), 1, [])
. Я поклонник функции KRON:
>> a = 1:3;
>> N = 3;
>> b = kron(a,ones(1,N))
b =
1 1 1 2 2 2 3 3 3
Вы можете также посмотреть на этот связанный с этим вопрос (который касался репликации элементов двухмерных матриц), чтобы увидеть некоторые другие решения, связанные с матричным индексированием. Вот одно такое решение (вдохновленное ответом Edric):
>> b = a(ceil((1:N*numel(a))/N))
b =
1 1 1 2 2 2 3 3 3