Мне нужно вычислить экспоненту следующего массива для моего проекта:
w = [-1.52820754859, -0.000234000845064, -0.00527938881237, 5797.19232191, -6.64682108484,
18924.7087966, -69.308158911, 1.1158892974, 1.04454511882, 116.795573742]
Но я получаю переполнение из-за числа 18924.7087966.
Цель состоит в том, чтобы избежатьиспользуя дополнительные пакеты, такие как bigfloat (кроме «numpy»), и получите близкий результат (который имеет небольшую относительную ошибку).
1. Пока я пытался использовать более высокую точность (например, float128):
def getlogZ_robust(w):
Z = sum(np.exp(np.dot(x,w).astype(np.float128)) for x in iter_all_observations())
return np.log(Z)
Но я все еще получаю "inf", чего я хочу избежать.
Я пытался обрезать его, используя nump.clip ():
def getlogZ_robust(w):
Z = sum(np.exp(np.clip(np.dot(x,w).astype(np.float128),-11000, 11000)) for x in iter_all_observations())
return np.log(Z)
Но относительная ошибка слишком велика.
Можете ли выпомогите решить эту проблему, если это возможно?