2017-11-28 25 views
5

Mam macierz MATLAB i chcę wykonać powtórzenie na podstawie liczby elementów tablicy. Poniżej znajduje się przykład, który chcę.Powtórzenie elementów tablicy w MATLAB

a = [2, 4, 6, 8] 

Jeśli chcę 7 elementów, wynik jest

aa = [2, 4, 6, 8, 2, 4, 6] 

Lub jeśli chcę 5 elementów,

aa = [2, 4, 6, 8, 2] 

Czy istnieje funkcja MATLAB, które sprawia, że ​​tego rodzaju skutek?

+0

Spójrz na [repmat] (https://ch.mathworks.com/help/matlab/ref/repmat.html) Funkcja. Nie jestem pewien, ale może ci to pomóc. :) –

+0

@ V.L. Dzięki za komentarz! Właśnie sprawdziłem repmat, ale wygląda na to, że dostępne są tylko całkowite czasy powtórzeń. –

Odpowiedz

3

Prostym rozwiązaniem będzie użycie zmiennej tymczasowej za to:

a = [2 4 6 8]; 
k = 7; 
tmp = repmat(a,1,ceil(k/numel(a))); 
aa = tmp(1:k) 

Po pierwsze, należy powtórzyć wektor korzystając z najmniejszą liczbę całkowitą, która sprawia, że ​​wynik większy niż k, a następnie usunąć nadmiar elementów.

Jeśli tak, że wiele razy można napisać mały funkcji pomocnika, aby to zrobić:

function out = semi_repmat(arr,k) 
tmp = repmat(arr,1,ceil(k/numel(arr))); 
out = tmp(1:k); 
end 
+1

Tak. Jako komentarz, powtarzam wektor używając najmniejszej liczby całkowitej (z funkcją podłogi) i zmniejszam rozmiar. Dzięki za komentarz! –

6

Możesz użyć „modułową indeksowanie”:

a = [2, 4, 6, 8]; % data vector 
n = 7; % desired number of elements 
aa = a(mod(0:n-1, numel(a))+1); 
Powiązane problemy