Как избежать числового переполнения в логе абсолютного значения суммы кубов? - PullRequest
1 голос
/ 05 июня 2019

Мне интересно вычислить журнал количества (| sum_i [(x_i) ^ 3] |); Проблема непосредственного использования np.log(abs((x**3).sum())) (где x - это массив элементов, а x ** 3 - разумно применить элемент функции куба к массиву), заключается в том, что некоторые значения в x**3 могут быть настолько большими и иметь потенциальные числовые проблемы. .

Мой план - использовать logsumexp трюк. Тем не менее, абсолютное значение вне суммы трудно избавиться. Любая помощь?

1 Ответ

1 голос
/ 05 июня 2019

Мы можем использовать немного математики, чтобы избежать числового переполнения.

Предположим, x - это массив numpy.

Проблема возникает из abs((x**3).sum()), а именно:операция кубирования.Мы можем сделать вычисление более стабильным, уменьшив каждое число в x до константы.Поскольку мы делим на константу внутри массива перед кубированием, нам нужно умножить на константу кубизированную вне суммирования.

Другими словами:

abs((x**3).sum()) = (constant**3)*abs(((x/constant)**3).sum())

Используя свойства журналов, вы можете упростить свое окончательное выражение до следующего:

np.log(constant**3) + np.log(abs(((x/constant)**3).sum(0)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...