Почему numpy рассматривает действительно маленькие числа как нули? - PullRequest
0 голосов
/ 04 февраля 2020

Я работаю над задачей оптимизации. рассмотрим "функцию эталона сферы" в двух измерениях.

enter image description here

import numpy as np
x = y = 0
X = np.array([x, y])
cost = np.sum(X**2)
print(cost) # zero

Стоимость функции будет равна нулю, где x и y равны нулю. однако рассмотрим этот пример:

import numpy as np
X = np.array([-6.5333928195191023e-163,  2.7628829205465545e-163])
Y = X**2 # [0, 0]
cost = np.sum(Y) # zero
print(cost) # zero

Стоимость не должна быть равна нулю, но она есть. Есть ли способ исправить эту проблему?

1 Ответ

0 голосов
/ 04 февраля 2020

Нормальная точность с плавающей запятой усечет ваши числа до нуля. Если вы действительно хотите использовать такие маленькие значения, вы можете сделать:

X = np.array([-6.5333928195191023e-163,  2.7628829205465545e-163], dtype=np.longdouble)
Y = X**2 # [0, 0]
cost = np.sum(Y) # zero
print(cost) # zero
>> 5.0318743766791623303e-325
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...