2017-09-09 51 views
5

Zrobiłem prosty kod na interpretera Pythona i uruchom go.dlaczego wynik jest różny między uruchomieniem interpretera python a kodem Pythona?

Python 3.5.3 (v3.5.3:1880cb95a742, Jan 16 2017, 16:02:32) [MSC v.1900 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import numpy as np 
>>> x=np.array([0,1]) 
>>> w=np.array([0.5,0.5]) 
>>> b=-0.7 
>>> np.sum(w*x)+b 
-0.19999999999999996 

Wynik -0,9999999999999996 jest dziwny. Myślę, że ... jest to spowodowane przez regułę IEEE 754. Ale kiedy próbuję uruchomić prawie ten sam kod po pliku, wynik jest dużo inny.

import numpy as np 
x = np.array([0,1]) 
w = np.array([0.5,0.5]) 
b = -0.7 
print(np.sum(w * x) + b) 

wynikiem jest "-0,2". Reguła IEEE 754 nie ma wpływu na wynik.

Jaka jest różnica między uruchomieniem opartym na plikach i uruchomionym przez interpreter?

+1

próbowałeś 'print (np.sum (w * x) + b) 'od twojego tłumacza? drukowanie to nie to samo, co proszenie tłumacza o jego przedstawienie. –

Odpowiedz

9

Różnica wynika z interpretacji wyników przez interpreter.

Funkcja print spróbuje użyć metody obiektu __str__, ale interpreter użyje obiektu __repr__.

Jeżeli w tłumacza napisałeś:

... 
z = np.sum(w*x)+b 
print(z) 

(czyli to, co robisz w kodzie) chcesz zobaczyć -0.2.

Podobnie, jeśli w kodzie napisałeś:

print(repr(np.sum(w * x) + b)) 

(czyli to, co robisz w tłumacza), który by zobaczyć -0.19999999999999996

+1

Nie wiedziałem o tym wcześniej. Niesamowite wytłumaczenie! – chrisckwong821

+0

Czy możesz wyjaśnić, w jaki sposób reguła IEEE754 nie działała w print()? –

+0

@LaserCho - Nie jestem pewien, co masz na myśli - decyzja o zaimplementowaniu 'numpy64.float''s' __repr__' i '__str__' inaczej to numpy, naprawdę (Python używał tego dla' float's ale od tego czasu je zunifikował). – jedwards

0

Myślę, że różnica polega na tym, że używasz print() dla swojego kodu opartego na pliku, który konwertuje liczbę, podczas gdy w przypadku tłumacza nie używasz print(), ale raczej poproś tłumacza o przedstawienie wyniku.