2013-09-17 4 views
1

Скажем, у меня есть один список поплавков и Numpy массив, который я желаю почтовый индекс:дополнительные десятичные знаки в массиве numpy?

>>> import numpy as np 
>>> n1 = [0.9, 1.1] 
>>> n2 = np.array([0.9,1.1]) 
>>> zip(n1,n2) 
    [(0.9, 0.90000000000000002), (1.1, 1.1000000000000001)] 

Почему я получаю все эти десятичные? Есть ли способ заставить float numpy вести себя как поплавки python?

EDIT: кажется, что расчеты также влияет пути Numpy магазинов плавает:

>>> nb1 = n2[1]+0.1 
>>> nb1 
    1.2000000000000002 
>>> nb2 = nb1 - 1.2 #nb2 should be equal to 0 
    2.2204460492503131e-16 
>>> nb3 = np.asscalar(nb2) 
>>> nb3 
    2.2204460492503131e-16 #nb3 should be equal to 0 
>>> type(nb3) 
    float 
+0

Вот как поплавки представлены в numpy, Python, я думаю, – adarsh

ответ

2

Оба питон поплавки и Numpy массивы, вероятно, 64-битные числа с плавающей точкой, но они «инкапсулируются 'в разных объектах. Разница, вероятно, связана с разными repr для поплавков python и numpy-поплавков.

In [12]: n1[0] 
Out[12]: 0.9 

In [13]: n2[0] 
Out[13]: 0.90000000000000002 

In [14]: n1[0] == n2[0] 
Out[14]: True 

In [15]: type(n1[0]) 
Out[15]: float 

In [16]: type(n2[0]) 
Out[16]: numpy.float64 

Та же проблема, вероятно, вызвало a previous question. Лично я считаю это ошибкой в ​​numpy.

+0

Спасибо за ваш ответ! Я полагаю, это означает, что я не могу заставить numpy float вести себя как python float? – HappyPy

+2

Они должны вести себя одинаково в вычислениях, это просто проблема печати, которую можно обойти, явно преобразовывая в строку. Убедитесь, что вы понимаете [проблемы с плавающей точкой] (http://docs.python.org/2/tutorial/floatingpoint.html). Также обратите внимание, что zip возвращает список кортежей, более естественно в этом случае помещать все в массив Nx2, который преобразует тайм-аут редактирования комментария pyy –

+0

. ...., который преобразует float python в numpy float. –

Смежные вопросы