2012-11-14 3 views
2

J'utilise interp1 pour inteprolate certaines données:méthode plus rapide d'interpolation en Matlab

temp = 4 + (30-4).*rand(365,10); 
depth = 1:10; 

dz = 0.5; %define new depth interval 
bthD = min(depth):dz:max(depth); %new depth vector 

for i = 1:length(temp); 
    i_temp(i,:) = interp1(depth,temp(i,:),bthD); 
end 

Ici, j'augmente la résolution de mes mesures en interpolant les mesures de 1 m par incréments de 0,5 m par incréments. Ce code fonctionne bien, c'est-à-dire qu'il me donne la matrice que je cherchais. Cependant, quand j'applique ceci à mes données réelles, cela prend beaucoup de temps à s'exécuter, principalement parce que je cours une boucle supplémentaire qui traverse plusieurs cellules. Existe-t-il un moyen de réaliser ce qui est décrit ci-dessus sans utiliser la boucle, en d'autres termes, existe-t-il une méthode plus rapide?

+0

Est-ce que i_temp dans la boucle 'for' est une faute de frappe? Voulez-vous dire layerP? – Peter

+0

Serait-il plus logique d'utiliser 'i_temp = interp1 (depth, temp, bthD)'? – dustincarr

+0

Merci, modifié maintenant, en ce qui concerne la réponse fournie par Dan Becker: Je suis à la recherche d'une solution qui pourrait éviter les boucles! – KatyB

Répondre

7

Remplacez votre boucle avec:

i_temp = interp1(depth,temp',bthD)'; 

Vous pouvez vous débarrasser des transposés si vous changez la façon dont temp est définie, et si vous êtes OK avec i_temp étant un tableau de 19x365 au lieu de 365x19.

BTW, le documentation pour interp1 est très clair que vous pouvez passer dans un tableau en tant que second argument.

+0

Génial. Je n'avais pas réalisé que la transposition de la matrice faisait la différence (ça a marché). Merci. – KatyB

+0

De rien! –

Questions connexes