这可以不用循环吗?
import numpy as np n = 10 x = np.random.random(n+1) a, b = 0.45, 0.55 for i in range(n): x = a*x[:-1] + b*x[1:]
我在一年前遇到过这种情况 another question Binomial options pricing model 但老实说,我不太明白这个话题。我只是对公式和迭代更新/收缩 x
x
让我觉得可能有用的是这个梵蒂冈
n = 10 a, b = 0.301201, 0.59692 x0 = 123 x = x0 for i in range(n): x = a*x + b*x # ~42
实际上只是 x0*(a + b)**n
x0*(a + b)**n
print(np.allclose(x, x0*(a + b)**n)) # True
您正在计算:
sum( a ** (n - i) * b ** i * x[i] * choose(n, i) for 0 <= i <= n)
[那应该是伪代码,而不是Python.]我不确定将其转换为Numpy的最佳方法。
choose(n, i) 是 n!/ (i! (n-i)!) ,而不是numpy choose函数。
choose(n, i)
n!/ (i! (n-i)!)
使用 @mathfux 的评论,一个人可以做到
@mathfux
import numpy as np from scipy.stats import binom binomial = binom(p=p, n=n) pmf = binomial(np.arange(n+1)) res = np.sum(x * pmf)
所以呢
res = x.copy() for i in range(n): res = p*res[1:] + (p-1)*res[:-1]
就是二项分布随机变量x的期望值。