Я работаю над программой, которая вычисляет значение ошибки, генерируя список PMF гипергеометрического распределения по диапазону значений, вычисляя попарно произведение этого списка и другого списка, нормализуя список с использованием общего знаменателя, затем суммируем часть списка.
Код хорошо работал на моем ноутбуке с Windows (работает на Python 3.7.1 на Anaconda) и в среде Ubuntu (Python 3.6.7), но не будет работать на новом рабочем столе Windows (на Python 3.7.3) , Я уже просматривал документацию по scipy, но не так много подробностей о том, что функция hypergeom.pmf может обрабатывать в качестве параметров. Я считаю, что это как-то связано с новой средой и, возможно, с установленной версией Python.
from scipy.stats import hypergeom as hg
def get_error(self, stop: int, audit: int) -> float:
# Get posterior distribution
posterior = hg.pmf(stop, self.total_votes, range(0, self.total_votes+1), audit)
posterior = [posterior[i]*self.prior[i] for i in range(len(posterior))]
posterior /= sum(posterior)
return sum(posterior[range(self.total_votes//2 + 1)])
Обычно posterior = hg.pmf(stop, self.total_votes, range(0, self.total_votes+1), audit)
возвращает список PMF, а затем функция возвращает число с плавающей запятой в диапазоне от 0 до 1. При запуске на новом компьютере программа не продолжает работу и выдает следующее сообщение об ошибке:
...
test_error = self.get_error(test_stop, audit_size)
File "C:\...\filename.py", line 77, in get_error
posterior = hg.pmf(stop, self.total_votes, list(range(0, self.total_votes+1)), audit)
File "C:\...\AppData\Local\Programs\Python\Python37\lib\site-packages\scipy\stats\_distn_infrastructure.py", line 2942, in pmf
_a, _b = self._get_support(*args)
File "C:..\AppData\Local\Programs\Python\Python37\lib\site-packages\scipy\stats\_discrete_distns.py", line 355, in _get_support
return np.maximum(N-(M-n), 0), np.minimum(n, N)
TypeError: unsupported operand type(s) for -: 'int' and 'list'
Кажется, функция hypergeom.pmf () больше не принимает range () в качестве параметра, но код отлично работает в двух других средах. Может ли быть установлено обновление или устаревший пакет на новом компьютере, который был неправильно установлен / обновлен при настройке новой среды?