2009-11-04 6 views
5

Supposons que j'ai les entrées data = [1 2 3 4 5 6 7 8 9 10] et num = 4. Je veux utiliser pour générer les éléments suivants:Comment générer la matrice et le vecteur suivants à partir des données d'entrée données dans 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] 

qui est basé sur la logique suivante:

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

Quelle est la meilleure façon de automatiser cela dans Matlab?

Répondre

10

est ici une option en utilisant la fonction 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: Il est drôle, je l'ai appris sur les fonctions matrice construction comme celle-ci relativement récemment (en fait, d'une réponse ici sur SO: http: // stackoverflow.com/questions/1000535/how-can--create-a-triangular-matrix-based-on-a-vector-in-matlab/1000889#1000889), et maintenant que je les connais je continue à trouver * sooo * beaucoup d'endroits pour les utiliser. ;) – gnovice

+0

Nice. J'aurais utilisé quelque chose basé sur circshift, mais c'est beaucoup plus élégant – Kena

+2

juste que mes données ne seront pas toujours '1: 10', donc j'ai utilisé' o = data (:, (num + 1: fin)) ". Je pensais utiliser plusieurs boucles pour obtenir la même chose. 'hankel' est tellement plus élégant. – Lazer

Questions connexes