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
Pytables Daten auslesen und vergleichen
@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
@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.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.

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