2017-10-28 3 views
0

ich viele Datendateien (testfft.dat) Whit drei Spalten wieFFT mit Python aus einer Datendatei

Müll | x | f (x)

100, 1, 0,129

100, 2, 0,198

usw.

wo '', ist der Separator. Ich habe versucht, die Fast-Fourier-Transformation über die f (x) -Spalte durchzuführen und dann das Spektrum gegen x zu zeichnen. Ich habe versucht, das nach einem anderen answer zu tun, aber ich kann das nicht funktionieren. Mehr noch, ich weiß Python überhaupt nicht, ich habe die FFT mit xmgrace gemacht, aber es ist nicht effizient.

Ich habe die folgenden (auf ipython)

import numpy as np 
import scipy as sy 
import scipy.fftpack as syfp 

array = np.loadtxt("testfft.dat") 

aber ich bekomme diese Fehlermeldung, wenn ich die letzte Zeile tun

ValueError        Traceback (most recent call last) 
<ipython-input-5-f42979d3ce2b> in <module>() 
----> 1 array = np.loadtxt("testfft.dat") 

~/.local/lib/python3.5/site-packages/numpy/lib/npyio.py in loadtxt(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin) 
    1022 
    1023    # Convert each value according to its column and store 
-> 1024    items = [conv(val) for (conv, val) in zip(converters, vals)] 
    1025    # Then pack it according to the dtype's nesting 
    1026    items = pack_items(items, packing) 

~/.local/lib/python3.5/site-packages/numpy/lib/npyio.py in <listcomp>(.0) 
    1022 
    1023    # Convert each value according to its column and store 
-> 1024    items = [conv(val) for (conv, val) in zip(converters, vals)] 
    1025    # Then pack it according to the dtype's nesting 
    1026    items = pack_items(items, packing) 

~/.local/lib/python3.5/site-packages/numpy/lib/npyio.py in floatconv(x) 
    723   if b'0x' in x: 
    724    return float.fromhex(asstr(x)) 
--> 725   return float(x) 
    726 
    727  typ = dtype.type 

ValueError: could not convert string to float: b'10,' 

Wie ich wirklich nicht, Python weiß, weiß ich nicht weiß was du von hier aus machen kannst.

Gibt es eine Möglichkeit das Skript aus der Antwort zu ändern, zu tun, was ich brauche?

Danke.

+0

Willkommen bei Stackoverflow! Die von Ihnen zitierte Antwort bot ein minimales, vollständiges und überprüfbares Beispiel: https://stackoverflow.com/help/mcve. Bitte bearbeiten Sie Ihre Frage, um das Gleiche zu tun. Welchen spezifischen Code/Daten haben Sie versucht und welcher Diagnosefehler ist aufgetreten, als er nicht für Sie funktionierte? Wir wollen dir helfen. Hilf uns, dir zu helfen. –

+0

@J_H Danke für den Rat, ich habe meine Frage mit allem, was ich getan habe, bearbeitet. – sempiternal

Antwort

2

Ihr Kopf hat ein anderes Trennzeichen (|) als für die Zeilen. Also müssen wir zuerst die Kopfzeile überspringen und dann den Spalten Namen (trash, x, f) geben. Dann fft verwenden scipy ist die diskrete Variante zu bekommen:

import numpy as np 
from scipy.fftpack import fft 

df = np.genfromtxt('testfft.dat', skip_header=1, names=['trash','x','f'], delimiter=',') 
print(fft(df['f'])) 
[ 0.327+0.j -0.069+0.j] 

Sie Dokumentation finden Sie hier: FFT

+0

Das funktioniert großartig. Jetzt werde ich versuchen, ein Skript zu machen, das dies über meine 56 Dateien wiederholt. Danke @sharatpc – sempiternal

+0

@sempiternal glücklich zu helfen. froh, wenn Sie die Antwort annehmen können. – skrubber

+0

erledigt. Nochmals vielen Dank – sempiternal