2009-11-04 2 views
5

Angenommen, ich habe die Eingänge data = [1 2 3 4 5 6 7 8 9 10] und num = 4. Ich möchte diese verwenden folgendes zu erzeugen:Wie erzeuge ich die folgende Matrix und den folgenden Vektor aus den gegebenen Eingabedaten in 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] 

, die auf der folgenden Logik basiert:

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

Was ist der beste Weg, um dies in MATLAB automatisieren?

Antwort

10

Hier ist eine Option mit der Funktion 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: Es ist schon komisch, ich gelernt, über Matrix-Gebäudefunktionen wie dies vor relativ kurzer Zeit (eigentlich aus einer Antwort hier auf SO: http: // stackoverflow.com/questions/1000535/how-can-i-create-a-triangular-matrix-based-on-a-vector-in-matlab/1000889#1000889), und jetzt, dass ich sie kenne, finde ich * sooo * viele Orte, um sie zu benutzen. ;) – gnovice

+0

Schön. Ich hätte etwas basierend auf circshift verwendet, aber das ist viel eleganter – Kena

+2

nur, dass meine Daten nicht immer '1: 10' sein werden, also habe ich' o = data (:, (num + 1: end)) ; '. Ich dachte daran, mehrere for-Schleifen zu verwenden, um dasselbe zu erreichen. 'hankel' ist einfach so viel eleganter. – Lazer

Verwandte Themen