Hallo,
ich lerne gerade python und möchte Daten aus einer txt Datei laden und mit diesen Daten eine Fast Fourier Transformation machen. Das Einlesen der Datei versuche ich gerade, aber ich weiss gar nicht, wie ich dann eine FFT machen kann? Ist das möglich?
mfg detlef
FFT mit Daten
Aber sicher, das geht beides mit `numpy`.
Einlesen `numpy.loadtxt` >> http://docs.scipy.org/doc/numpy/referen ... adtxt.html
FFT: `numpy.fft` >> http://docs.scipy.org/doc/numpy/referen ... s.fft.html
Einlesen `numpy.loadtxt` >> http://docs.scipy.org/doc/numpy/referen ... adtxt.html
FFT: `numpy.fft` >> http://docs.scipy.org/doc/numpy/referen ... s.fft.html
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher
http://ms4py.org/
Gerhard Kocher
http://ms4py.org/
Hallo,
ich habe beim Laden der Datei an so etwas gedacht:
Aber meine txt-Datei hat auch Text in den ersten 3 Zeilen, wie kann ich diese im Delimiter ignorieren? Wie müssen die Daten in der txt-Datei getrennt sein? Bei mir sind 3Leerzeichen zwischen den Spalten, ist das wichtig?
Wie ich nun weiter mit der FFT mache, versteh ich nicht so ganz??
mfg
ich habe beim Laden der Datei an so etwas gedacht:
Code: Alles auswählen
pfad = "s:/wspiegel/info/dein_Verzeichnis_name/" # anpassen!!
dateiname="datei.txt"
datei = pfad+dateiname
in_file =np.loadtxt(datei,dtype 'float',3)
text = in_file.read()
in_file.close()
Wie ich nun weiter mit der FFT mache, versteh ich nicht so ganz??
mfg
Vielleicht solltest du sowohl das Python-Tutorial durcharbeiten als auch die Doku zu loadtxt lesen. Vor allem letzteres sollte dir deine Fragen beantworten.
Auch wundert es mich, dass dein geposteter Code bei dir zu funktionieren scheint. Denn wenn er es nicht tut, stellst du die falschen Fragen.
Auch wundert es mich, dass dein geposteter Code bei dir zu funktionieren scheint. Denn wenn er es nicht tut, stellst du die falschen Fragen.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Die üblichen Fragen lauten:
1 - wie sieht denn die Syntax der Datendateien aus?
2 - kann man diese ggf. beeinflussen und ein anderes, sinnvolleres Format wählen (sofern bei 1 etwas schlechtes ans Tageslicht kam)
Dabei spielt natürlich ggf. auch eine Rolle, wie die weiterverarbeitenden Libs die Daten benötigen...
1 - wie sieht denn die Syntax der Datendateien aus?
2 - kann man diese ggf. beeinflussen und ein anderes, sinnvolleres Format wählen (sofern bei 1 etwas schlechtes ans Tageslicht kam)
Dabei spielt natürlich ggf. auch eine Rolle, wie die weiterverarbeitenden Libs die Daten benötigen...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Hallo,
so sieh die txt-Datei aus:
Zum Laden der Datei :
Also mich interessieren eigentlich nur die 1 und die 3 Spalte, dass kann man mit usecols einstellen oder? Muss ich auch einstellen, wie die Spalten in der txt getrennt sind?
mfg
so sieh die txt-Datei aus:
Zum Laden der Datei :
Code: Alles auswählen
pfad = "s:/wspiegel/info/dein_Verzeichnis_name/" # anpassen!!
dateiname="datei.txt"
datei = pfad+dateiname
fname=np.loadtxt(datei, dtype=<type 'float'>, comments='#', delimiter=2, converters=None, skiprows=0, usecols=(0,2), unpack=False)¶
mfg
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Probiers doch oder guck in die Doku und probiers dann01detlef hat geschrieben: Also mich interessieren eigentlich nur die 1 und die 3 Spalte, dass kann man mit usecols einstellen oder? Muss ich auch einstellen, wie die Spalten in der txt getrennt sind?
Der Text oben drüber könnte natürlich Probleme machen...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Hallo,
es lief heute vormittag nicht und jetzt kann ich es bis morgen nicht probieren, würde aber gerne weiterkommen!
Also in der Doku steht ja zu loadtx:
numpy.loadtxt(fname, dtype=<type 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False)¶
load data from a text file
und fname muss man ja noch einlesen oder?Mit dem delimiter würde ich die ersten beiden Reihen abtrennen und usecols=(0,2)
Und wie kann ich dann die FFT anwenden?
mfg
es lief heute vormittag nicht und jetzt kann ich es bis morgen nicht probieren, würde aber gerne weiterkommen!
Also in der Doku steht ja zu loadtx:
numpy.loadtxt(fname, dtype=<type 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False)¶
load data from a text file
und fname muss man ja noch einlesen oder?Mit dem delimiter würde ich die ersten beiden Reihen abtrennen und usecols=(0,2)
Und wie kann ich dann die FFT anwenden?
mfg
Aha, warum schreibst du das nicht gleich? Und "lief nicht" ist keine Problembeschreibung.01detlef hat geschrieben:es lief heute vormittag nicht
Da steht sogar noch mehr. Da drunter sind die einzelnen Parameter haarklein beschrieben. Erwarte nicht, dass dir das hier wer auf deutsch übersetzt. Übrigens würde ich dir nochmal dringen raten das Python-Tutorial durchzuarbeiten. http://docs.python.org/tutorial/control ... ent-values kommt da nämlich durchaus drin vor.Also in der Doku steht ja zu loadtx:
Im Zweifelsfall indem du dir Wikipedia schnappst und die Formeln anwendest. Oder doku zu numpy.fft lesen.Und wie kann ich dann die FFT anwenden?
Ich würde dir wirklich sehr empfehlen das ganze mal im interaktiven Python-Interpreter Stück für Stück auszuprobieren und zu gucken, wie die Daten aussehen, die da raus kommen. Wenn dir dann was unklar ist, kannst du gerne Fragen. Aber allgemeines vorkauen von allem wird hier keiner machen.
Ich habe mir das ja durchgelesen zu loadtxt und auch was gefragt, was nicht genau da steht.
Aber fname muss man ja noch einlesen oder?Mit dem delimiter würde ich die ersten beiden Reihen abtrennen und usecols=(0,2) setzen für die erste und dritte Spalte. Wie werden die Spalten getrennt?
mfg
Aber fname muss man ja noch einlesen oder?Mit dem delimiter würde ich die ersten beiden Reihen abtrennen und usecols=(0,2) setzen für die erste und dritte Spalte. Wie werden die Spalten getrennt?
mfg
Doch genau das steht da, alles.01detlef hat geschrieben:Ich habe mir das ja durchgelesen zu loadtxt und auch was gefragt, was nicht genau da steht.
Frage verstehe ich nicht, was willst du überhaupt machen. Was meinst du mit „noch einlesen“.Aber fname muss man ja noch einlesen oder?
Nein, doku zu skiprows lesen.Mit dem delimiter würde ich die ersten beiden Reihen abtrennen
Das ist die einzige Frage die ich wirklich nachvollziehen kann, Antwort: ja.und usecols=(0,2) setzen für die erste und dritte Spalte.
Doku zu delimiter nochmal richtig lesen. Wie kommst du da drauf, dass man damit Reihen überspringt?Wie werden die Spalten getrennt?
Wieso muß man "fname" einlesen? Das kannst Du natürlich machen, aber Du kannst auch den String in Dein Skript schreiben. Und was den Text in Deinem Textfile angeht: Prosa und numerische Daten sollte man nicht mischen, es sei denn, man macht den Text eindeutig als Kommentar kenntlich, z. B. mit "#" oder anderen Zeichen. Ansonsten kannst Du natürlich auch den skiprows-Parameter von numpy.loadtxt nutzen: Einfach auf 2 setzten.
Ich weiß nicht, wie ich Dein Codebeispiel deuten soll. Hoffentlich nicht so, daß Du alle Parameter so übergibt, wie Du schreibst und auch nicht so, wie ich Deine weiteren Posts interpretiere. Also:
- "delimiter = 2" ist eigentlich gar nicht definiert. Wenn Du Glück hast wird das Zeichen "2" als Delimiter benutzt (bin gerade zu faul in den Quelltext zu schauen), aber Du hast whitespace, was dem default entspricht, also warum überhaupt setzen?
- dtype = <type 'float'> schreibt man so nicht. Ist auch überflüssig. Ansonsten einfach mal in der numpy-Doku nachschauen.
- skiprows müßte, wie gesagt auf 2 gesetzt werden.
- "datei" ist als Name nicht sehr deskriptiv. Mir ist dabei nicht direkt klar, ob es ein String sein soll oder eine geöffnete Datei.
Also wäre das in etwa so:
, wobei x der gewünschten Spalte entspricht.
Ich habe Dir mal soweit weiter geholfen, doch eigentlich hilft Dir das kaum wirklich weiter, wenn Du nicht das Tutorial und die numpy-Anleitung durchkaust. Ja, kostet Zeit, aber sonst kannst Du nicht richtig loslegen.
HTH
Christian
Ich weiß nicht, wie ich Dein Codebeispiel deuten soll. Hoffentlich nicht so, daß Du alle Parameter so übergibt, wie Du schreibst und auch nicht so, wie ich Deine weiteren Posts interpretiere. Also:
- "delimiter = 2" ist eigentlich gar nicht definiert. Wenn Du Glück hast wird das Zeichen "2" als Delimiter benutzt (bin gerade zu faul in den Quelltext zu schauen), aber Du hast whitespace, was dem default entspricht, also warum überhaupt setzen?
- dtype = <type 'float'> schreibt man so nicht. Ist auch überflüssig. Ansonsten einfach mal in der numpy-Doku nachschauen.
- skiprows müßte, wie gesagt auf 2 gesetzt werden.
- "datei" ist als Name nicht sehr deskriptiv. Mir ist dabei nicht direkt klar, ob es ein String sein soll oder eine geöffnete Datei.
Also wäre das in etwa so:
Code: Alles auswählen
a = np.loadtxt(datei, skiprows=2, ...)
np.fft.fft(a.T[x])
Ich habe Dir mal soweit weiter geholfen, doch eigentlich hilft Dir das kaum wirklich weiter, wenn Du nicht das Tutorial und die numpy-Anleitung durchkaust. Ja, kostet Zeit, aber sonst kannst Du nicht richtig loslegen.
HTH
Christian
Hallo,
1)also mir ist nicht klar was fname sein soll. Ich habe die ganze Zeit gedacht, dass man hier die komplette Adresse der einzulesenden Datei angeben muss?! Deshalb habe ich noch den weiteren Code gedacht zum Einlesen!
2) Als Delimiter ist Whitespace eingestellt, okay. Gibt es auch kein Problem, wenn zwischen den Spalten unterscheidlich viele Leerzeichen sind?
Ich werde jetzt erstmal das Tutorial durcharbeiten
vielen dank
1)also mir ist nicht klar was fname sein soll. Ich habe die ganze Zeit gedacht, dass man hier die komplette Adresse der einzulesenden Datei angeben muss?! Deshalb habe ich noch den weiteren Code gedacht zum Einlesen!
2) Als Delimiter ist Whitespace eingestellt, okay. Gibt es auch kein Problem, wenn zwischen den Spalten unterscheidlich viele Leerzeichen sind?
Ich werde jetzt erstmal das Tutorial durcharbeiten
vielen dank
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Vermutlich der Dateiname.01detlef hat geschrieben: 1)also mir ist nicht klar was fname sein soll. Ich habe die ganze Zeit gedacht, dass man hier die komplette Adresse der einzulesenden Datei angeben muss?! Deshalb habe ich noch den weiteren Code gedacht zum Einlesen!
Probiere das doch einfach aus! Mal ehrlich: Das geht doch schneller als hier ein Posting zu estellen...2) Als Delimiter ist Whitespace eingestellt, okay. Gibt es auch kein Problem, wenn zwischen den Spalten unterscheidlich viele Leerzeichen sind?
Wie schon Darii Dir empfohlen hat: Nimm eine interaktive Shell und probiere doch mal Dinge Stück für Stück aus.
Die FFT kannst Du doch auch ohne das Einlesen aus einer Datei testen - anderherum kannst Du das Einlesen von Daten aus einer Datei doch auch ohne FFT testen. Wenn beides läuft, musst Du das nur noch kombinieren.
Was Du nie beantwortet hast: Kannst Du das Format der Eingabedaten beeinflussen? Wenn ja, dann spare Dir die Kommentare oder ändere sie so ab, wie man es mit der numpy.loadtxt() gut ignorieren kannst und lasse doch einfach die Spalten weg, die Dich nicht interessieren.
Auf jeden Fall teste das alles Schritt für Schritt und gieße das dann in Funktionen; eine zum Laden und Daten parsen und ggf. dann eine für die FFT.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Nochmal ganz deutlich, auch wenn das eigentlich eindeutig in der Doku steht: Du kannst entweder eine geöffnete Datei übergeben oder den Dateinamen selbst.01detlef hat geschrieben:1)also mir ist nicht klar was fname sein soll. Ich habe die ganze Zeit gedacht, dass man hier die komplette Adresse der einzulesenden Datei angeben muss?! Deshalb habe ich noch den weiteren Code gedacht zum Einlesen!
Code: Alles auswählen
filename = 'x.txt'
# a)
with open(filename) as fobj:
x1 = numpy.loadtxt(fobj)
# b)
x2 = numpy.loadtxt(filename)
Nein, mehrere Leerzeichen sind immer noch "any whitespace"...01detlef hat geschrieben: 2) Als Delimiter ist Whitespace eingestellt, okay. Gibt es auch kein Problem, wenn zwischen den Spalten unterscheidlich viele Leerzeichen sind?
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher
http://ms4py.org/
Gerhard Kocher
http://ms4py.org/
Hallo,
also ich habe jetzt wirklich viel herumprobiert, aber ich verstehe nicht, wieso immer angesagt wird, dass
name 'numpy' is not defined
Das läuft wunderbar, aber bei dem Code mit loadtxt wird immer der Fehler angezeigt:
mfg
also ich habe jetzt wirklich viel herumprobiert, aber ich verstehe nicht, wieso immer angesagt wird, dass
name 'numpy' is not defined
Code: Alles auswählen
fobj = open("woerterbuch.txt", "r")
for line in fobj:
print line
fobj.close()
Code: Alles auswählen
a = np.loadtxt(datei, skiprows=2, ...)
Code: Alles auswählen
import numpy
datei = 'sinus.txt'
a = numpy.loadtxt(datei, skiprows=2)
res=numpy.fft.fft(a[1])
mfg
@01detlef: Was meinst Du mit "letztem" Wert? Du greifst auf den Index 1 von `a` zu, also auf die zweite Zeile des zweidimensionalen Arrays. Die Zählung beginnt bei 0.
Was hast Du denn vor? Was enthält die Datei für Daten, also was bedeuten die Werte, Zeilen, die Datei als ganzes? Und was möchtest Du als Ergebnis haben?
Was hast Du denn vor? Was enthält die Datei für Daten, also was bedeuten die Werte, Zeilen, die Datei als ganzes? Und was möchtest Du als Ergebnis haben?
Hallo,
da liegt wohl mein Fehler. Ich möchte das alle Daten in der zweiten Spalte einer FFT unterzogen werden. In der ersten Spalte ist die Zeit und in der zweiten die y-Werte dazu und davon soll die FFT gemacht werden.
mfg
da liegt wohl mein Fehler. Ich möchte das alle Daten in der zweiten Spalte einer FFT unterzogen werden. In der ersten Spalte ist die Zeit und in der zweiten die y-Werte dazu und davon soll die FFT gemacht werden.
mfg