Потому что это разные числа и разные числа имеют разные эффекты округления.
(Практически любой из связанных вопросов справа внизу объяснит причину самих эффектов округления.)
Хорошо, более серьезный ответ.Похоже, что numpy выполняет некоторое преобразование или вычисление чисел в массиве:
>>> t = numpy.array([0.22])
>>> t[0]
0.22
>>> t = numpy.array([0.24])
>>> t[0]
0.23999999999999999
, тогда как Python не делает этого автоматически:
>>> t = 0.22
>>> t
0.22
>>> t = 0.24
>>> t
0.24
Ошибка округления меньше, чем у numpyЗначение «eps» для float
, которое подразумевает, что оно должно рассматриваться как равное (и фактически оно есть):
>>> abs(numpy.array([0.24])[0] - 0.24) < numpy.finfo(float).eps
True
>>> numpy.array([0.24])[0] == 0.24
True
Но причина, по которой Python отображает его как «0,24», а numpy неДело в том, что метод Python по умолчанию float.__repr__
использует более низкую точность (что, IIRC, было довольно недавним изменением):
>>> str(numpy.array([0.24])[0])
0.24
>>> '%0.17f' % 0.24
'0.23999999999999999'