Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Hallo, ich bin gerade dabei Python zu lernen und moechte nun Datenpunkte in einer Ascii Tabelle mit einer Gauss function fitten. Im Scipy cookbook habe ich folgende Anweisung gefunden.
from pylab import *
gaussian = lambda x: 3*exp(-(30-x)**2/20.)
data = gaussian(arange(100))
plot(data)
X = arange(data.size)
x = sum(X*data)/sum(data)
width = sqrt(abs(sum((X-x)**2*data)/sum(data)))
max = data.max()
fit = lambda t : max*exp(-(t-x)**2/(2*width**2))
plot(fit(X))
show()
mein Problem ist aber ich weiss nicht genau, was ich aendern muss, wenn ich statt diesem gaussian(arange(100)) eine Tabelle einlesen moechte.
Kann mir da vielleicht jemand helfen?
phygirl hat geschrieben:
mein Problem ist aber ich weiss nicht genau, was ich aendern muss, wenn ich statt diesem gaussian(arange(100)) eine Tabelle einlesen moechte.
Kann mir da vielleicht jemand helfen?
Wie sieht denn Deine "Tabelle" aus? (Datenstruktur?)
Ich bin mir nicht sicher was du mit Struktur meinst.
Ich habe eine Tabelle und das sind Messungen von Spektrallinien. Und ich brauche am Ende von denen die Halbwertsbreite und die 'Flaeche'.
Jedenfalls kann man die Linien gut mit Gauss kurven approximieren.
ja das weiss ich. Aber ich habe doch eine Gauss Verteilung. Da bin ich mir ziemlich sicher.
Mein Problem ist einfach, dass Programm so unzuschreiben, dass es meine Datei benutzt und diese Gauss fittet.
phygirl hat geschrieben:Ich bin mir nicht sicher was du mit Struktur meinst.
Naja, wie sehen die Daten aus, die in data drin stehen? Ist das eine Liste, ein Tupel, eine verschachtelte Struktur, ...
Denn du musst ja wissen, wie Du die Daten aus der Textdatei aufbereiten musst, damit sie dann im weiteren Verlauf verarbeitet werden können. Daher muss man wissen, wie data aufgebaut ist!
phygirl hat geschrieben:Aber das plottet doch das ganze nur und macht keinen gauss Fit oder?
Na, das sollte ja auch nur demonstrieren, wie man die Zahlenpaare aus der Datei parst. Wenn die Datenstruktur nun gleich ist, kannst Du das an Stelle von data bei Deinem Quelltext nehmen. Darauf wollte ich ja immer hinaus.
from pylab import *
gaussian = lambda x: 3*exp(-(30-x)**2/20.)
data = gaussian(arange(100))
plot(data)
X = arange(data.size)
x = sum(X*data)/sum(data)
width = sqrt(abs(sum((X-x)**2*data)/sum(data)))
max = data.max()
fit = lambda t : max*exp(-(t-x)**2/(2*width**2))
plot(fit(X))
show()
Das is mein Code wie er im Moment aussieht. Und ich bekomme keine Fehlermeldungen mehr. Das Problem ist nur, das er als X-Achsen Werte nicht meine erste Spalten nimmt, sondern sie einfach sequentiell aufsteigen laesst.
Hast du dafuer vielleciht eine ERklaerung?
Ist das nicht exakt der Code aus dem ersten Posting? *wunder*
Ich dachte Dein Problem war, wie Du Werte aus einer Textdatei anstelle der generierten nehmen kannst?
Welche Fehlermeldung hattest Du denn?
Zur aktuellen Frage kann ich nichts sagen, da ich kein matplotlib installiert habe hier und mich mit der Thematik nicht auskenne. Das erscheint mir aber wenih Python spezifisch zu sein...
Welches / welche Probleme willst Du denn eigentlich lösen? Sind wir mittlerweile bei zwei Problemen angekommen?
import numpy, asciidata, pylab, matplotlib.pyplot
import matplotlib
from pylab import *
matplotlib.rc('text', usetex = True)
gaussian = lambda x: 3*exp(-(30-x)**2/20.)
X, data = loadtxt('test.dat', unpack=True)
plot(data)
X = arange(data.size)
x = sum(X*data)/sum(data)
width = sqrt(abs(sum((X-x)**2*data)/sum(data)))
max = data.max()
fit = lambda t : max*exp(-(t-x)**2/(2*width**2))
plot(fit(X))
show()
Mein Problem ist: Ich habe mene Daten und moechte darueber einen Gauss Fitt plotten.
Das macht das Programm jetzt. Aber wenn ich nur die Daten plotte, laeuft meine X-Achse von 8000 bis 9000.
WEnn ich jetzt aber beide uebereinander plotte laueft das ganze von 0 bis 1000. Das ist seltsam. Wird sich auch noch loesen lassen
import numpy, asciidata, pylab, matplotlib.pyplot
import matplotlib
from pylab import *
matplotlib.rc('text', usetex = True)
gaussian = lambda x: 3*exp(-(30-x)**2/20.)
X, data = loadtxt('test.dat', unpack=True)
plot(X, data)
X = arange(data.size)
x = sum(X*data)/sum(data)
width = sqrt(abs(sum((X-x)**2*data)/sum(data)))
max = data.max()
fit = lambda t : max*exp(-(t-x)**2/(2*width**2))
plot(X, fit(X))
show()
Ist eigentlich nicht so schwer...
Erklärung ist wohl eh überflüssig, hab das Gefühl, dass du über keine der Antworten wirklich sinnvoll nachgedacht hast, sonst hättest du das Problem schon längst selber lösen können.