hdf5-Dateien mit chi-squares

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.
Antworten
nadine_83
User
Beiträge: 12
Registriert: Donnerstag 10. Oktober 2013, 15:27

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?
BlackJack

@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.
nadine_83
User
Beiträge: 12
Registriert: Donnerstag 10. Oktober 2013, 15:27

Ok, das Einlesen bekomme ich noch hin.

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
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.

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
ist es nun auch möglich, dass man die unterschiedlichen exp nicht einzeln eingeben muss, sondern automatisch im programm ersetzt werden können?
BlackJack

@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

Code: Alles auswählen

def readfile(filename):
    with h5py.File(filename, 'r') as h5_file:
        return list(h5_file)
Die `chisq1()` sollte auch kürzer gehen:

Code: Alles auswählen

def chisq1(sim, exps, std=1):
    return np.sum((exps - sim)**2 / std**2)
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.
nadine_83
User
Beiträge: 12
Registriert: Donnerstag 10. Oktober 2013, 15:27

sorry für die späte Antwort. Habe es hinbekommen und nun klappt es. Danke für eure Hilfe.
Antworten