1 Вопрос: Временное решение для ошибки 'sum pk not равняется 1' в модуле scipy stats.rv_discrete

вопрос создан в Thu, May 2, 2019 12:00 AM

В python3 функция scipy stats.rv_discrete требует, чтобы сумма вероятностей была равна 1, но из-за представления чисел с плавающей запятой сумма не равна 1.

К счастью, scipy был установлен в моем домашнем каталоге, поэтому я смог закомментировать строки 'if', проверяющие сумму в ~ .local /lib /python3.7 /site-packages /scipy /stats /_distn_infrastructure.py файл, тем самым заставляя его работать. Но что делать, если этот код запускается в другой системе. Копирование файла в рабочий каталог и его импорт приводит к слишком большому количеству ошибок. Пользовательский код с нуля (с использованием списков) кажется крайне неэффективным.

if len(xk) != len(pk):
    raise ValueError("xk and pk need to have the same length.")
#if not np.allclose(np.sum(pk), 1):
    #raise ValueError("The sum of provided pk is not 1.")

Надеюсь получить эффективную функцию с нуля или правильный обходной путь.

    
0
1 ответ                              1                         

Вы можете нормализовать значения pk, чтобы избежать ошибки. Это «заставит» сумму вероятностей быть равной 1.

До:

from scipy import stats
xk = np.arange(7)
pk = (0.1, 0.2, 0.3, 0.1, 0.1, 0.0, 0.19) 
custm = stats.rv_discrete(name='custm', values=(xk, pk))

Ошибка: ValueError: сумма предоставленного pk не равна 1.

После: р>

from scipy import stats
xk = np.arange(7)
pk = (0.1, 0.2, 0.3, 0.1, 0.1, 0.0, 0.19)
pk_norm = tuple(p/sum(pk) for p in pk)
custm = stats.rv_discrete(name='custm', values=(xk, pk_norm))

Результат: хорошо

    
1
2019-05-02 15: 29: 43Z
источник размещен Вот