2017-09-09 6 views
5

나는 파이썬 인터프리터에서 간단한 코드를 만들어 실행했다.왜 파이썬 인터프리터와 파이썬 코드를 실행하면 결과가 달라 집니까?

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 

결과 -0.19999999999999996이 이상합니다. 제 생각에는 .... IEEE 754 규칙 때문입니다. 그러나 파일별로 거의 동일한 코드를 실행하려고하면 결과가 매우 다릅니다.

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) 

결과는 "-0.2"입니다. IEEE 754 규칙은 결과에 영향을 미치지 않습니다.

파일 기반 실행과 해석기 기반 실행의 차이점은 무엇입니까?

+1

당신이'시도 인쇄 (np.sum 한 볼 것 w * x) + b)'당신의 통역관으로부터? 인쇄는 통역사에게 그것을 표현하도록 요청하는 것과 같지 않습니다. –

답변

9

차이점은 인터프리터가 출력을 표시하는 방법 때문입니다.

print 함수는 객체의 __str__ 메소드를 사용하려고 시도하지만 객체의 __repr__을 사용합니다.

인터프리터에서 당신이 쓴 경우

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

(코드에서 무슨 일을하는지입니다) 당신이 -0.2을 볼 것입니다. 코드에서 당신이 쓴 경우

마찬가지로 :

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

(인터프리터에서 무슨 일을하는지입니다) 당신은 (-0.19999999999999996

+1

나는 이것을 이전에 알지 못했습니다. 굉장한 설명! – chrisckwong821

+0

IEEE754 규칙이 print()에서 어떻게 작동하지 않았는지 설명 할 수 있습니까? –

+0

@LaserCho - 당신이 무슨 뜻인지 모르겠다.'numpy64.float'의'__repr__'과'__str__'을 다르게 구현하는 결정은 numpy입니다. (파이썬은'float'을 위해서 이것을 사용했지만 이후 그들을 통일했다). – jedwards

0

나는 차이점은 숫자를 변환하는 파일 기반 코드에 print()을 사용한다는 사실에 있으며, 통역사의 경우 print()을 사용하지 않고 결과를 표시하도록 해석기에 요청합니다.