2012-11-29 2 views
2

내 우분투 리눅스 머신의 새로운 Python 2.7.3 인터프리터에서 다음 코드를 실행하면 코드 뒤에 출력이 나온다.리스트에서 numpy-to-list로 바뀐 파이썬의 이상한 소수점

import numpy as np 
p = [1/3., 1/2., 23/25., 1] 
q = np.array(p) 
r = list(q) 
print p; print q; print r 

출력 :

[0.3333333333333333, 0.5, 0.92, 1] 
[ 0.33333333 0.5   0.92  1.  ] 
[0.33333333333333331, 0.5, 0.92000000000000004, 1.0] 

내가 다른 이유 p와 r에 인쇄를 알아 내기 위해 노력하고 있지만, 지금까지 그럴듯한 이론 없어요. 왜 다른지에 대한 아이디어가 있습니까?

답변

3

그들은 다르게 인쇄 :

In [23]: map(type, p) 
Out[23]: [float, float, float, int] 

In [24]: map(type, r) 
Out[24]: [numpy.float64, numpy.float64, numpy.float64, numpy.float64] 

NumPy와 배열이 균일 한 유형이기 때문에이 문제가 발생, 그래서 모든 float64 때 확대됩니다 q을 만듭니다. 두리스트에

숫자가 동등 비교 그래서 순수 포맷의 차이이다 :

In [22]: p == r 
Out[22]: True 
1

이것은 __repr__np.float64 대 파이썬 float에 대해 구현 된 방법과 다른 점이라고 생각합니다.

numpy 배열에서 목록을 만들 때 (np.float64 유형의) 요소를 가져 와서 목록에 넣습니다. 따라서 실제로 원래 데이터 유형을 float에서 np.float64으로 변환했습니다. pfloatint의 목록이기 때문에 rnumpy.float64의 목록입니다 반면

관련 문제