2015-09-02 2 views
0

У меня слишком много чисел для использования с встроенными типами Python, и поэтому я использую десятичную библиотеку. Я хочу использовать scipy.optimise.brentq с функцией, которая работает с «десятичными знаками», но когда функция возвращает десятичную величину, она, очевидно, не может использоваться с внутренними функциями, основанными на плавающей запятой. Как я могу обойти это: Как я могу использовать методы scipy оптимизации с классом Decimal для больших чисел?Использование десятичных чисел с scipy?

ответ

2

Вы не можете. Scypy в значительной степени полагается на числовые алгоритмы, которые имеют дело только с истинными численными типами данных и не могут иметь дело с десятичным классом.

Как общее правило: если ваша проблема хорошо определена и хорошо кондиционирована (это то, что определяют численные математики), вы можете просто масштабировать ее так, чтобы она вписывалась в обычный питон float, а затем вы можете примените к нему функциональность Scipy.

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

Если, однако, ваша функция возвращает только значения, которые бы вписаться в поплавок, то вы могли бы просто использовать

lambda x: float(your_function(x)) 

вместо your_function в brentq.

+0

Это только что началось, похоже, проблема не была в scipy. Является ли Scipy внутренним преобразованием его в float или он работает с десятичной точкой? –

+1

scipy никогда не будет использовать десятичную внутренность! это объясняет первое предложение @Markus Müller! – sascha

Смежные вопросы