Seite 1 von 1

Pytables Daten auslesen und vergleichen

Verfasst: Montag 2. Januar 2012, 16:11
von Kopflos
Hallo,

ich habe gerade folgendes Problem bei Pytables:
Ich habe eine Tabelle in der ich Parameter einer Funktion speichere und jeden Zeile hat noch eine ID. Nun möchte ich, dass meine Programm eine neue Zeile erstellt, wenn es die Funktion mit den Parametern zum ersten mal aufruft und wenn es diese Parameter schon gibt, soll es die ID zurück geben. Nun habe ich ein Problem welches wahrscheinlich nicht nur bei Pytables auftritt, sondern allgemein bei dem Vergleich von verschiedenen Datentypen.
Ein Parameter ist bei mir 0.3 groß, wenn ich ihn nun in Pytables als Float32 speichere, speichert er den Wert als 0.29999.. und somit würde mein Programm immer wieder eine neue Zeile erstellen weil dieser Wert ungleich 0.3 ist. Gibt es für dieses Problem vielleicht eine allgemeine Lösung oder hat jemand eine Idee wie ich dieses Problem lösen könnte?

Im voraus schon mal danke für alle hilfreiche Antworten

Re: Pytables Daten auslesen und vergleichen

Verfasst: Montag 2. Januar 2012, 16:59
von Kopflos
Ok, sorry für die Frage habe es nun selber lösen können :)

Re: Pytables Daten auslesen und vergleichen

Verfasst: Montag 2. Januar 2012, 17:25
von BlackJack
@Kopflos: Ich weiss ja nicht wie Du es nun gelöst hast, aber wahrscheinlich war das kein Problem, denn 0.3 lässt sich als `float` mit einer binären Repräsentation nicht verlustfrei darstellen, egal wie viele Bits man dafür her nimmt:

Code: Alles auswählen

In [34]: 0.3
Out[34]: 0.29999999999999999

Re: Pytables Daten auslesen und vergleichen

Verfasst: Montag 2. Januar 2012, 18:22
von nomnom
Möglicherweise kannst du deine Zahlen als Strings in der Datenbank speichern, und dann mit dem `decimal`-Modul arbeiten.

Re: Pytables Daten auslesen und vergleichen

Verfasst: Montag 2. Januar 2012, 19:52
von BlackJack
@nomnom: Das würde dem Sinn von `pytables` ein wenig widersprechen. Das Format nimmt man in der Regel wenn man viele numerische Werte hat, die man in (oft mehrdimensionalen) Arrays effizient speichern und verarbeiten möchte. Zeichenketten und `decimal` sind davon so ziemlich das Gegenteil. :-)

Re: Pytables Daten auslesen und vergleichen

Verfasst: Montag 2. Januar 2012, 23:09
von nomnom
BlackJack hat geschrieben:@nomnom: Das würde dem Sinn von `pytables` ein wenig widersprechen. Das Format nimmt man in der Regel wenn man viele numerische Werte hat, die man in (oft mehrdimensionalen) Arrays effizient speichern und verarbeiten möchte. Zeichenketten und `decimal` sind davon so ziemlich das Gegenteil. :-)
Das wusste ich nicht. :) Aber wenn man die Genauigkeit braucht …

Re: Pytables Daten auslesen und vergleichen

Verfasst: Dienstag 3. Januar 2012, 09:14
von Kopflos
@ BlackJack: Ja ich habe gerade ein klein wenig Probleme mit dem "float". Ich speichere die 0.3 als Float32 und wenn ich sie mir dann aber auslese ist es wieder vom Type "np.float64" aber ungleich mit np.float64(0.3). Muss mir nun mal überlegen wie ich das nun am elegantesten löse.

Re: Pytables Daten auslesen und vergleichen

Verfasst: Dienstag 3. Januar 2012, 10:13
von gkuhl
@Kopflos: Grundsätzlich vergleicht man Fließkommazahlen mit Fehlertoleranz, z.B.: `abs(zahl1 - zahl2) < 1e-3`. Was du beschreibst klingt etwas nach Look-up Tabellen. Hier würde es sich anbieten mit Intervallen zu arbeiten.