2016-04-20 6 views
1

Im mit folgendem Problem stecken:Die Interpolation fehlende Werte useing np.interp

einen anderen Code Mit i-Dateien erzeugen, die x- und y-Werte, Frequenzen und Intensitäten erzeugen. Ich benutze 2 verschiedene Methoden und folglich 2 verschiedene Sätze von x, y. Die Idee ist, den einen mit dem anderen zu normieren, um einen normalisierten Fluss zu erhalten. Der Hilfscode verwendet jedoch unterschiedliche Abtastraten, da er seine Rate automatisch anpasst. Eine Normalisierung ist daher nicht möglich, da die Größen unterschiedlich lang sind!

Lösung interpolieren die fehlenden Werte. Der geeignetste Weg, den ich gefunden habe, ist mit np.interp. Well:

Heres mein Code:

#Freq2_f1 is the frequency of File 1 - high sampling rate 
#Freq2_f2 is frequency of File2 - low sampling rate 
#Inten2_f1 is intensity of File1 - high sampling rate 
#Inten2_f2 is intensity of File 2 - low sampling rate 

Freq_f2=filearray2[0:num2-3] 
Freq1_f2 = list(itertools.chain.from_iterable(Freq_f2)) 
Freq2_f2=np.array(map(float,Freq1_f2)) 
Inten_f2=filearray2[num2+1:len(filearray2)] 
Inten1_f2 = list(itertools.chain.from_iterable(Inten_f2)) 
Inten2_f2=np.array(map(float,Inten1_f2)) 


Inten_int=np.interp(Freq2_f1,Freq2_f2,Inten2_f2) 
#Inten_int=griddata(Freq2_f2,Inten2_f2,Freq2_f1,method='linear') 
print 
print 'Input frequency=highly sampled frequency' 
print(Freq2_f1) 
print 'Length of input frequency',len(Freq2_f1) 
print 'Frequency of less sampled data' 
print(Freq2_f2) 
print 'Length of less sampled intensity', len(Freq2_f1) 
print 'Intensity of less sampled data' 
print(Inten2_f2) 
print 'Length of less sampled frequency', len(Freq2_f2) 
print 'Output array of np.interp ' 
print(Inten_int) 
print 'Length of interpolated intensity', len(Inten_int) 

Dies ist, was es ergibt: , wie Sie die Ausgabe-Array sehen Inten_int ist nur eine Konstante von 1.051e-02!

Input frequency=highly sampled frequency 
[ 6.87718000e+01 6.86571000e+01 6.85425900e+01 ..., 3.92414600e-03 
3.91760100e-03 3.56145800e-03] 
Length of input frequency 9576 
Frequency of less sampled data 
[ 6.87718000e+01 6.86571000e+01 6.85425900e+01 ..., 3.92347200e-03 
3.91692900e-03 3.56145800e-03] 
Length of less sampled frequency 5857 
Intensity of less sampled data 
[ 1.02640000e-36 1.20500000e-36 1.42720000e-36 ..., 1.19530000e-02 
1.19260000e-02 1.05100000e-02] 
Length of less sampled intensity 5857 
Output array of np.interp 
[ 1.05100000e-02 1.05100000e-02 1.05100000e-02 ..., 1.05100000e-02 
1.05100000e-02 1.02640000e-36] 
Length of interpolated intensity 9576 

Ich habe keine Ahnung warum! Die Werte der Frequenzen (eintönig) wie gefordert durch np.interp zunehmende

Ich entschuldige mich die Variablen für die Benennung dieses crappy :(

Antwort

2

Von docs, die Signatur:

np.interp(x, xp, fp, left=None, right=None, period=None) 

und :

...

xp: 1-D-Folge von Gleitkommazahlen - Die X-Koordinaten der Datenpunkte müssen zunehmen, wenn keine Argumentperiode angegeben ist. ...

(Schwerpunkt ist mein.)

Ihre xp (Freq2_f2) sieht aus wie es Abnahme ist - nicht erhöht wird.

Frequency of less sampled data 
[ 6.87718000e+01 6.86571000e+01 6.85425900e+01 ..., 3.92347200e-03 3.91692900e-03 3.56145800e-03] 

Sie könnten wahrscheinlich versuchen:

Inten_int = np.interp(Freq2_f1, Freq2_f2[::-1], Inten2_f2[::-1]) 
+0

Thank you! Das war das Problem .. manchmal sieht man nicht das Offensichtliche :( – Sebastiano1991

Verwandte Themen