MATLAB

2017-11-28 92 views
5

için dizi öğelerinin tekrarı MATLAB dizim var ve dizi öğelerinin sayısına bağlı olarak tekrarlamak istiyorum. Aşağıda istediğim örnek var.MATLAB

a = [2, 4, 6, 8] 

Ben 7 unsurları istiyorsanız, sonuç

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

olduğunu Ya da 5 elemanları, isterseniz

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

sonucu bu tür kılan herhangi MATLAB fonksiyonu var mıdır?

+0

[repmat] bir göz atın (https://ch.mathworks.com/help/matlab/ref/repmat.html) işlevi. Emin değilim ama sana yardımcı olabilir. :) –

+0

@ V.L. Yorum için teşekkürler! Ben sadece repmat'i kontrol ettim ama sadece tekrarlama süreleri var gibi görünüyor. –

cevap

3

Basit bir seçenek olduğu için geçici bir değişken kullanmak olacaktır:

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

İlk olarak, k daha sonuç daha büyük hale getirir en küçük tamsayı kullanarak vektör tekrarlamak ve sonra aşırı öğeleri kaldırmak.

birçok kez bunu yapmak için küçük bir yardımcı işlev yazabilirsiniz bunu yaparsak:

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

Evet. Yorumunuz olarak, vektörü en küçük tamsayı kullanarak (kat fonksiyonuyla) tekrar ediyorum ve boyutu azaltın. Yorum için teşekkürler! –

6

Sen "modüler indeksleme" kullanabilirsiniz:

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