首先,我是scipy
的新手。这可能是一个新秀问题。在给定离散输入的情况下,我不确定如何使用scipy.discrete.expect
来计算以下函数:1,2,3
m = lambda k: (0.12*np.sin((2*np.pi*k)/3 + np.pi/2))**2
k = 1,2,3
现在,在我知道如何使用标准函数之前,我自己写了一个小函数。
input_k = [np.array([1]),np.array([2]),np.array([3])]
def discrete_expect_mk(input_k):
temp_k = []
for i in input_k:
temp_k.append(m(i))
return np.array([np.mean(temp_k)])
discrete_expect_mk(input_k)
感谢您的帮助!
答案 0 :(得分:2)
在您的情况下,您可以使用scipy.stats.randint
(low=1, high=4).expect(m)
在使用字母k
的任意统一多项式的更一般情况下,您可以使用
uniform_dist = scipy.stats.rv_discrete(values=(k, np.ones(k)/len(k)))
result = uniform_dist.expect(m)
答案 1 :(得分:1)
在这种情况下,您不需要for
循环:
import numpy as np
m = lambda k: (0.12*np.sin((2*np.pi*k)/3 + np.pi/2))**2
k=np.arange(1,4) # k = array([1, 2, 3])
print (m(k))
# array([ 0.0036, 0.0036, 0.0144])
print (np.mean(m(k)))
# 0.0072
如果您想使用scipy.stats.rv_discrete
,请确保m(k)
是概率,即它们加起来为1.
from scipy import stats
pk = m(k)
pk /= np.sum(m(k)) # making sure they add up to 1
func = stats.rv_discrete(name='custm', values=(k, pk))
func.expect()
# 2.5
如果您坚持使用rv_discrete
并且所有m
具有相同的概率,您可以使用:
from scipy import stats
pk = np.ones_like(m(k))/len(m(k))
func = stats.rv_discrete(name='custm', values=(m(k), pk))
func.mean()
# 0.0072