2016-06-24 7 views
2

Ich versuche, Daten von einem hdf5-Datensatz (f_one, im folgenden Screenshot) in ein numpliges Array zu kopieren, merke aber, dass ich an Genauigkeit eingebüßt habe. enter image description hereGenauigkeitsverlust beim Übertragen von Daten von hdf5-Datensätzen in numply-Datenfelder

Die letzte Zeile des Screenshot (die letzte print-Anweisung)

subid2[0] == subid[1] lesen sollte.

Ich habe gerade versehentlich die 2 vor dem Screenshot gelöscht. Die Ausgabe ist korrekt. Wie Sie sehen können, scheint Python zu glauben, dass diese beiden Zahlen genau gleich sind - allerdings brauche ich die Genauigkeit, um zwischen diesen beiden Zahlen zu unterscheiden, wenn sie in einem numply-Array enthalten sind. Weiß jemand, wie ich diese Präzision bekommen kann? Kurz gesagt, wie kann ich erreichen, dass die letzte Druckanweisung False liefert?

By the way, die folgenden:

f_one['SubhaloID'][0] == f_one['SubhaloID'][1] 

ergibt Falsch. Es gibt also eine gewisse Genauigkeit beim Kopieren in das numply-Array.

Antwort

3

Das Problem ist, dass Ihre Eingaben vom Integer-Typ sind, aber wenn Sie ein numpy Array erstellen, ohne den Datentyp anzugeben, haben Sie sie am Ende als Floats umgewandelt. Um dies zu vermeiden, verwenden Sie, wenn Sie für diese Daten ein Nummernfeld erstellen. Eine andere Option besteht darin, das vorhandene Integer-Array direkt zu konvertieren, sodass der Typ seiner Einträge übernommen wird.

Hier ist ein vereinfachtes Beispiel.

import numpy as np 
a = [30000000200000000, 30000000200000001] 
print(a[0]==a[1])   # False 
b = np.array(a) 
print(b[0]==b[1])   # False, direct conversion still has integers 
c = np.array([]) 
for i in range(2): 
    c = np.append(c, a[i]) 
print(c[0]==c[1])   # True, the entries are now floats 
d = np.array([], dtype=np.int64) 
for i in range(2): 
    d = np.append(d, a[i]) 
print(d[0]==d[1])   # False, the entries were declared as integers 

Überprüfen Sie die Typen type(c[0]) und type(d[0]) mit dem Unterschied zu sehen.

+0

Danke! Es funktionierte. – billbert