2017-11-28 15 views
5

Tôi có một mảng MATLAB và muốn tạo một sự lặp lại dựa trên số phần tử mảng. Dưới đây là ví dụ mà tôi muốn.Lặp lại các phần tử mảng trong MATLAB

a = [2, 4, 6, 8] 

Nếu tôi muốn 7 yếu tố, kết quả là

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

Hoặc nếu tôi muốn 5 yếu tố,

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

Có bất kỳ chức năng MATLAB mà làm cho các loại quả?

+0

Hãy xem tại [repmat] (https://ch.mathworks.com/help/matlab/ref/repmat.html) chức năng. Tôi không chắc chắn nhưng nó có thể giúp bạn. :) –

+0

@ V.L. Cảm ơn vì đã bình luận! Tôi chỉ kiểm tra repmat nhưng nó trông giống như chỉ số nguyên lần lặp lại có sẵn. –

Trả lời

3

Một lựa chọn đơn giản sẽ được sử dụng một biến tạm thời cho rằng:

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

Trước tiên, bạn lặp lại các vector sử dụng các số nguyên nhỏ nhất mà làm cho kết quả lớn hơn k, và sau đó bạn loại bỏ các yếu tố dư thừa.

Nếu bạn làm điều đó nhiều lần bạn có thể viết một hàm helper nhỏ để làm điều đó:

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

Có. Theo nhận xét của bạn, tôi lặp lại các vector bằng cách sử dụng số nguyên nhỏ nhất (với chức năng sàn) và giảm kích thước. Cảm ơn vì đã bình luận! –

6

Bạn có thể sử dụng "indexing mô-đun":

a = [2, 4, 6, 8]; % data vector 
n = 7; % desired number of elements 
aa = a(mod(0:n-1, numel(a))+1); 
Các vấn đề liên quan