Мне нужно нарисовать график плотности распределения Пуассона и гистограмму выборки, но возникает заданная ошибка, которую я понятия не имею, как решить.
import numpy as np
import matplotlib.pyplot as plt
lam = 3 # Параметр распределения Пуассона (лямбда)
x = np.arange(0, 20)
# Вычисление значений плотности распределения Пуассона
y = np.exp(-lam) * (lam ** x) / np.math.factorial(x)
# Построение графика
plt.plot(x, y, 'bo', ms=8) # 'bo' - голубые круглые маркеры
plt.xlabel("Значение СВ")
plt.ylabel("Плотность")
plt.title("Распределение Пуассона")
plt.show()
Я пробовал заменить x на np.array(x), но это ни к чему не привело






Вместо
y = np.exp(-lam) * (lam ** x) / np.math.factorial(x)
вам следует перебирать значения x, поэтому попробуйте следующее:
y = [np.exp(-lam) * (lam ** i) / np.math.factorial(i) for i in x]
Остальное то же самое.
Добавляя к ответу Угура, вам нужно векторизовать функцию факториала (очень необычно внутри пакета numpy). Также для барного сюжета необходимо использовать plt.bar:
import matplotlib.pylab as plt
import numpy as np
lam = 3 # Параметр распределения Пуассона (лямбда)
x = np.arange(0, 20)
# Вычисление значений плотности распределения Пуассона
y = np.exp(-lam) * (lam ** x) / np.vectorize(np.math.factorial)(x)
# Построение графика
plt.bar(x, y) # 'bo' - голубые круглые маркеры
plt.xlabel("Значение СВ")
plt.ylabel("Плотность")
plt.title("Распределение Пуассона")
plt.show()
Согласно этот ответ , np.math.factorial и scipy.math.factorial являются просто псевдонимами math.factorial, который не работает с массивами numpy. Вместо этого используйте scipy.special.factorial, который может работать с массивами numpy.
from scipy.special import factorial
x = np.arange(0, 20)
# other code here
y = np.exp(-lam)*(lam**x)/factorial(x)
# plotting code here
Чего вы ожидаете от
np.math.factorial([0, 1, ...., 19])?