Сравнение массивов, не соответствующих элементному сравнению в numpy
У меня есть массив numpy arr. Это numpy.ndarray, размер такой (5553110,), dtype=float32.
Когда я это делаю:
(arr > np.pi )[3154950]
False
(arr[3154950] > np.pi )
True
Почему первое сравнение неверно? И как я могу это исправить?
Значения:
arr[3154950]= 3.1415927
np.pi= 3.141592653589793
Есть ли проблема с точностью?
1 ответ:
Проблема связана с точностью
np.float32vsnp.float64.Используйте
np.float64, и вы не увидите проблемы:import numpy as np arr = np.array([3.1415927], dtype=np.float64) print((arr > np.pi)[0]) # True print(arr[0] > np.pi) # True
Как @ WarrenWeckesser комментирует:
Она включает в себя то, как numpy решает привести аргументы своих операций. По-видимому, сarr > scalarскаляр преобразуется в то же самое введите в качестве массиваarr, который в данном случае являетсяnp.float32. С другой силы, что-то вродеarr > arr2, с обоих аргументов нескалярные массивы, они будут использовать общие данные тип. Вот почему (arr > np.array([np.pi]))[3154950]возвращаетTrue.