我有一个包含以下几行的Python代码:
# Poisson model
lambda_param = 3.0
x_model = numpy.linspace(0, 10, num=10)
y_model = numpy.zeros(10)
index = 0
for x in x_model:
y_model[index] = numpy.power(lambda_param, x) / math.factorial(x) * numpy.exp(-lambda_param)
index += 1
我想用一种更Pythonic的方式来写这个——不使用for循环。
我试过这个:
y_model = numpy.power(lambda_param, x_model) / math.factorial(x_model) * numpy.exp(-lambda_param)
但这似乎不起作用,我猜是因为
math.factorial
不知道如何操作像数组这样的对象。
有办法做到这一点吗?
scipy.special.factorial
作为支持在 numpy 数组上广播的阶乘函数。
import numpy as np
import scipy.special
>>> scipy.special.factorial(np.arange(7))
array([ 1., 1., 2., 6., 24., 120., 720.])