Совместное использование mpmath и scipy.stat

Я пытаюсь использовать библиотеку mpmath, которая обеспечивает арифметику произвольной точности, и библиотеку scipy.stats вместе:

from mpmath import mpf
from scipy.stats import norm 

x = mpf(3) # arbitrary precision float
y = norm.cdf(x)

Однако norm.cdf внутри проверяет, является ли его вход числом, вызывая np.isnan(x). Поэтому я получаю следующую ошибку:

Traceback (most recent call last):

File "name of my file", line 5, in <module>
y = norm.cdf(x)

File "C:\Program Files\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py", line 1734, in cdf
place(output, (1-cond0)+np.isnan(x), self.badvalue)

TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

Есть ли способ заставить scipy.stats.cdf использовать mpmath.isnan вместо np.isnan? Или есть другой способ решить эту проблему?


person Umer    schedule 17.01.2017    source источник


Ответы (1)


mpmath реализует собственные методы для нормального распределения: mpdf и нкдф.

from mpmath import ncdf
y = ncdf(x)         # returns mpf('0.9986501019683699')

Кроме преобразования mpf в обычные числа с плавающей запятой, вы не можете заставить методы, отличные от mpmath, работать с объектами mpf. Их базовые вычислительные процедуры предназначены для работы с фиксированной точностью (часто на Фортране) и понятия не имеют, что делать с mpf. Вот почему mpmath повторно реализует математические функции, которые уже существуют в SciPy.

person Community    schedule 18.01.2017