Создание подкласса scipy.stats.rv_continious для усеченного распространенияPython

Программы на Python
Гость
Создание подкласса scipy.stats.rv_continious для усеченного распространения

Сообщение Гость »

Я хотел бы создать случайную величину из усеченной дополнительной функции ошибки. Для этого я хочу создать подкласс scipy.stats.rv_continious. Я проверил непрерывные дистрибутивы Subclassing scipy и написал следующий код, используя Python 3.8.5:

Код: Выделить всё

import numpy as np
from scipy import special

from scipy.stats import *
import scipy.stats

import scipy.integrate as integrate

class truncErfc_gen(rv_continuous):
''' Class for a truncated complementary error function
a and b are bounds
'''
def _argcheck(self, a, b): return (a < b)

def _get_support(self, a, b): return a, b

def _pdf(self, x, a, b): return special.erfc(x) / integrate.quad(special.erfc(x), a, b)[0] # Normalize the function over its bounds

truncErfc = truncErfc_gen(name='truncErfc', momtype=1)

x = np.linspace(-1, 10, 1000)

y = truncErfc.pdf(x, a=0., b=10.)
Однако я получаю сообщение об ошибке:

Код: Выделить всё

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Ошибка возникает из-за вызова интеграции, используемого для нормализации PDF-файла.
Есть предложения?

Подробнее здесь: https://stackoverflow.com/questions/784 ... stribution

Вернуться в «Python»