hdf5-Dateien mit chi-squares
Hallo erstmal. Ich versuche ein Programm in Python zu schreiben, bei dem der chi-squares benutzt wird. Die benötigten Daten befinden sich im hdf5-Format. Nun muss ich eine bestimmte Datei mit unterschiedlichen Dateien verwenden und daraus jeweils den chi-squares berechnen. Die Funktion für chi-squares habe ich schon, aber wie schaffe ich es jetzt, dass ich zwei hdf5-Dateien damit verbinde?
@nadine_83: Du müsstest die Dateien halt mit einer entsprechenden Bibliothek öffnen und die gewünschten Daten auslesen. Also die direkte Antwort auf Deine Frage wäre: Mit Quelltext der das macht was Du haben willst. Das hängt halt davon ab *was* Du haben willst, und wie die Daten aussehen die Du hast.
Die beiden üblichen Kandidaten zum Lesen von HDF5 sind in Python `h5py` und `PyTables`. Als ich das letzte mal geschaut habe hatte das erste eine API die recht nah an der HDF5-Spezifikation dran war und letzteres hatte eine „pythonischere” API.
Die beiden üblichen Kandidaten zum Lesen von HDF5 sind in Python `h5py` und `PyTables`. Als ich das letzte mal geschaut habe hatte das erste eine API die recht nah an der HDF5-Spezifikation dran war und letzteres hatte eine „pythonischere” API.
Ok, das Einlesen bekomme ich noch hin.
Wie sieht es nun mit folgendem aus:
Ich habe eine Datei namens "sim", die ich mit anderen Dateien, exp, vergleichen muss. aus diesen muß ich ein Vergleichsmaß bestimmen. Das kann man am besten mit chi-squares.
ist es nun auch möglich, dass man die unterschiedlichen exp nicht einzeln eingeben muss, sondern automatisch im programm ersetzt werden können?
Code: Alles auswählen
def readfile(file):
f = h5py.File(file ,'r')
lines_f = list()
try:
for line in f:
lines.append(line.strip())
finally:
f.close()
return lines_f
Ich habe eine Datei namens "sim", die ich mit anderen Dateien, exp, vergleichen muss. aus diesen muß ich ein Vergleichsmaß bestimmen. Das kann man am besten mit chi-squares.
Code: Alles auswählen
def chisq1(sim, exps, std = None):
if std == None:
chisq = np.sum((exps - sim)**2)
else:
chisq = np.sum((exps - sim)**2 / std**2)
return chisq
@nadine_83: Das einlesen sieht sehr eigenartig aus. Damit liest Du die Namen der Objekte auf Wurzelebene aus der HDF5-Datei aber keine Werte mit denen man rechnen könnte. Und das `strip()` ist überflüssig, weil die Namen normalerweise nicht mit „whitespace” anfangen oder enden, beziehungsweise sogar *falsch* weil solche Zeichen, sollten sie vorhanden sein, nicht einfach verworfen werden dürfen.
`h5py.File`-Objekte sind Kontextmanager, man kann sie also mit der ``with``-Anweisung verwenden. Damit würde die komische `readfile()`-Funktion zu
Die `chisq1()` sollte auch kürzer gehen:
Die Frage habe ich nicht so ganz verstanden. Es sei denn Du fragst gerade ob es in Python Schleifen als Sprachkonstrukt gibt, dann ist die Antwort ja.
`h5py.File`-Objekte sind Kontextmanager, man kann sie also mit der ``with``-Anweisung verwenden. Damit würde die komische `readfile()`-Funktion zu
Code: Alles auswählen
def readfile(filename):
with h5py.File(filename, 'r') as h5_file:
return list(h5_file)
Code: Alles auswählen
def chisq1(sim, exps, std=1):
return np.sum((exps - sim)**2 / std**2)