Функция Scipy Shift теряет точность - PullRequest
0 голосов
/ 18 февраля 2019
from scipy.ndimage.interpolation import shift
a = np.array([0., 1.])
shift_left = shift(a, -1, cval=np.NaN)
shift_right = shift(a, 1, cval=np.NaN)
print(shift_left)
print(shift_right)

Вот результаты из кода выше

[ 1. nan]
[ nan -8.32667268e-17]

Вот то, что я ожидаю, что результаты будут

[ 1. nan]
[ nan 0.]

Есть ли причина для этой потериточность?Кто-нибудь знает, что может быть причиной этой проблемы и как я мог это исправить?Кажется, это происходит, когда я смещаю массивы, содержащие значение 0, хотя это может происходить в других случаях, насколько я знаю.

1 Ответ

0 голосов
/ 18 февраля 2019

Полученное число -8.32667268e-17 меньше (* отрицательного) машинного эпсилона типа float64.Подобные результаты ожидаются от алгоритмов, обрабатывающих числа с плавающей запятой.После сдвига вы можете установить все значения, меньшие, чем у эпсилон машины, на ноль:

def eps2zero(x, dtype=np.float64):
    """ this sets values < eps to zero in-place """
    x[np.abs(x) < np.finfo(dtype).eps] = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...