2013-02-14 14 views
5

Używam numpy funkcja loadtxt do odczytu w dużym zestawie danych. Dane wydają się zaokrąglone. na przykład: liczba w pliku tekstowym wynosi -3.79000000000005E + 01, ale numpy odczytuje liczbę jako -37,9. Ustawiłem dypte na np.float64 w wywołaniu loadtxt. Czy mimo to zachowuje precyzję oryginalnego pliku danych?Numpy loadtxt zaokrąglanie numerów

Odpowiedz

5

loadtxt nie zaokrągla liczby. Co widzisz jest droga NumPy wybiera druku tablica:

In [80]: import numpy as np 

In [81]: x = np.loadtxt('test.dat', dtype = np.float64) 

In [82]: print(x) 
-37.9 

Rzeczywista wartość jest np.float64 najbliżej wartości odbieranego.

In [83]: x 
Out[83]: array(-37.9000000000005) 

lub w bardziej prawdopodobny przykład, że masz większą gamę wymiarową,

In [2]: x = np.loadtxt('test.dat', dtype = np.float64) 

Jeśli repr z x wygląda obcinane:

In [3]: x 
Out[3]: array([-37.9, -37.9]) 

można użyć np.set_printoptions, aby uzyskać wyższą precyzję:

In [4]: np.get_printoptions() 
Out[4]: 
{'edgeitems': 3, 
'infstr': 'inf', 
'linewidth': 75, 
'nanstr': 'nan', 
'precision': 8, 
'suppress': False, 
'threshold': 1000} 

In [5]: np.set_printoptions(precision = 17) 

In [6]: x 
Out[6]: array([-37.90000000000050306, -37.90000000000050306]) 

(Dzięki @mgilson za wskazanie na to.)

+1

To może również być pouczające wspomnieć [ 'np.set_printoptions'] (http://docs.scipy.org/doc/numpy/reference /generated/numpy.set_printoptions.html) – mgilson

+0

Doskonały. To rozwiązało zagadkę. Zmiana opcji np.set_print pozwala na drukowanie pełnych numerów. – JMD