<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'ai un jeu de données constitué de deux colonnes, X et Y, résultant d'une mesure (voltamétrie cyclique utilisant le potentiostat PAR). Malheureusement, l'espacement de X n'est pas égal (varie entre 0,0005 et 0,0015) et le logiciel de l'instrument ne peut pas résoudre ce problème. Je voudrais rééchantillonner ou interpoler les données pour obtenir un espacement égal, disons, de 0,001 en X. Existe-t-il un moyen rapide de le faire ?
La réponse à votre question dépend de l'irrégularité de vos valeurs x et de ce que vous entendez précisément par « interpoler ».
Le script ci-dessous n’est donc certainement pas une recommandation, juste un exemple du genre de choses possibles. Si vous n'avez pas besoin d'un script, vous devriez pouvoir suivre des étapes similaires manuellement.
Cependant, la question importante est probablement de savoir à quoi servirez-vous les valeurs finales ?
NomsDefaultToHere ( 1 ) ;
// (0) Créez des données régulièrement espacées en utilisant une fonction particulière
h = Fonction ( { X } , { Local par défaut } , 0,5 + 0,4 * Péché ( 2 * Pi () * X ) ) ;
N = 100 ; // Nombre de valeurs x (équidistantes) dans [0,1]
xValeurs = Indice ( 0 , 1 , 1 / ( N - 1 ) ) `; // valeurs x en tant que vecteur colonne
yVals = h ( xValeurs ) + J. ( N , 1 , Aléatoire Normal ( 0 , 0,1 ) ) ; // valeurs y sous forme de vecteur colonne
// (1) Décimer aléatoirement les trois quarts des données pour simuler des valeurs x inégales (mais toujours sur la grille d'origine)
del = Index aléatoire ( N , Rond ( 3 * N / 4 , 0 )) ;
xValeurs [ del ] = [] ;
yVals [ del ] = [] ;
dt = NouveauTableau ( "Inégal x" ,
NouvelleColonne ( "X" , Numérique , Continu , Valeurs ( xValeurs )) ,
NouvelleColonne ( "oui" , Numérique , Continu , Valeurs ( yVals ))
) ;
// (2) Ajuster un noyau plus lisse et enregistrer la formule de prédiction
bivouac = dt << Bivarié ( Oui ( : oui ) , X ( : X ) ) ;
bivouac << Noyau plus lisse ( 1 , 1 , 0,48261 , 0 , { Enregistrer la formule de prédiction }) ;
// (3) Obtenir la formule de prédiction
pForm = Colonne ( dt , "Prédicteur de Loess pour vous" ) << obtenirPropriété ( "Formule" ) ;
// (4) Créer une nouvelle table pour contenir des valeurs x équidistantes
CMD = Expr (
dt2 = NouveauTableau ( "Même x" ,
NouvelleColonne ( "X" , Numérique , Continu ) ,
NouvelleColonne ( "Y prédit" , Numérique , Continu , Formule ( À déterminer ))
)
) ;
RemplacerDans ( CMD , Expr ( À déterminer ) , ÉvalExpr ( pForm )) ;
CMD ;
// (5) Obtenez les données mesurées simulées dans deux vecteurs
xValeurs = Colonne ( dt , "X" ) << ObtenirEn tant queMatrix ;
yVals = Colonne ( dt , "oui" ) << ObtenirEn tant queMatrix ;
// (6) Trouver le plus petit incrément x dans les données
xDel = Min. ( xValeurs [ 2 :: NRangée ( xValeurs )] - xValeurs [ 1 :: ( NRangée ( xValeurs ) - 1 )]) ;
// (7) Remplissez le tableau avec les données interpolées en utilisant un espacement égal, disons 3*xDel
xValeurs2 = Indice ( 0 , 1 , 3 * xDel ) `;
Colonne ( dt2 , "X" ) << Définir les valeurs ( xValeurs2 ) ;
// (8) Regardez le résultat
dt2 << Générateur de graphiques (
Taille ( 534 , 454 ) ,
Afficher le panneau de configuration ( 0 ) ,
Variables ( X ( : X ) , Oui ( : Prédit y ) ) ,
Éléments ( Points ( X , Oui , Légende ( 5 ) ) )
) ;