以数组为指数的Numpy幂

cqoc49vn  于 2023-11-18  发布在  其他
关注(0)|答案(2)|浏览(96)

我有一个Python代码,包含以下行:

# Poisson model

lambda_param = 3.0

x_model = numpy.linspace(0, 10, num=11, dtype=int)
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

字符串
我想用一种更Python化的方式来写这段代码--不使用for循环。
我试过这个:

y_model = numpy.power(lambda_param, x_model) / math.factorial(x_model) * numpy.exp(-lambda_param)


但这似乎不起作用,我猜是因为math.factorial不知道如何操作类似于对象的数组。
有办法做到这一点吗?

envsm3lx

envsm3lx1#

这是泊松分布的pmf。使用scipy.stats.poisson:注意对于泊松分布,x必须是整数:

lambda_param = 3.0
x_model = np.arange(10)
y_model = np.zeros(10)

from scipy import stats
stats.poisson(lambda_param).pmf(x_model)
array([0.04978707, 0.14936121, 0.22404181, 0.22404181, 0.16803136,
       0.10081881, 0.05040941, 0.02160403, 0.00810151, 0.0027005 ])

字符串

zpjtge22

zpjtge222#

您可以使用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.])

字符串

相关问题