2009-11-04 29 views
5

Giả sử tôi có các đầu vào data = [1 2 3 4 5 6 7 8 9 10]num = 4. Tôi muốn sử dụng chúng để tạo ra những điều sau đây:Làm cách nào để tạo ma trận và véc tơ sau từ dữ liệu đầu vào đã cho trong MATLAB?

i = [1 2 3 4 5 6; 2 3 4 5 6 7; 3 4 5 6 7 8; 4 5 6 7 8 9] 
o = [5 6 7 8 9 10] 

mà là dựa trên logic sau đây:

length of data = 10 
num = 4 
10 - 4 = 6 
i = [first 6; second 6;... num times] 
o = [last 6] 

gì là cách tốt nhất để tự động này trong MATLAB?

Trả lời

10

Dưới đây là một lựa chọn bằng cách sử dụng chức năng HANKEL:

>> data = 1:10; 
>> num = 4; 
>> i = hankel(data(1:num),data(num:end-1)) 

i = 

    1  2  3  4  5  6 
    2  3  4  5  6  7 
    3  4  5  6  7  8 
    4  5  6  7  8  9 

>> o = i(end,:)+1 

o = 

    5  6  7  8  9 10 
+0

@Jacob: Thật buồn cười, tôi đã học về chức năng ma trận xây dựng như thế này tương đối gần đây (trên thực tế, từ một câu trả lời ở đây trên SO: http: // stackoverflow.com/questions/1000535/how-can-i-create-a-triangular-matrix-based-on-a-vector-in-matlab/1000889#1000889), và bây giờ tôi biết chúng tôi tiếp tục tìm kiếm * sooo * nhiều nơi để sử dụng chúng. ;) – gnovice

+0

Đẹp. Tôi đã sử dụng một cái gì đó dựa trên circshift, nhưng điều này là nhiều hơn nữa thanh lịch – Kena

+2

chỉ là dữ liệu của tôi sẽ không phải luôn luôn '1: 10', vì vậy tôi đã sử dụng' o = dữ liệu (:, (num + 1: end)) ; '. Tôi đã nghĩ đến việc sử dụng nhiều cho các vòng lặp để đạt được như vậy. 'hankel' chỉ đơn giản hơn rất nhiều. – Lazer

Các vấn đề liên quan