【问题标题】:Iterative Binomial Update without Loop没有循环的迭代二项式更新
【发布时间】:2021-01-26 06:38:12
【问题描述】:

这可以不用循环来完成吗?

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 的迭代更新/缩小很感兴趣,想知道是否可以在没有循环的情况下完成。但我无法理解它,我不确定这是否可能。

让我觉得它可能有用的是这个 vaiaton

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

print(np.allclose(x, x0*(a + b)**n))
# True

【问题讨论】:

    标签: python numpy iteration binomial-coefficients


    【解决方案1】:

    你正在计算:

    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 选择函数。


    使用@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 的期望值。

    【讨论】:

    • 您可以查看scipy.stats.binom。希望这有助于完成您的解决方案。但我不确定问题是否与概率质量函数有关。
    • 感谢您的提示。它看起来很眼熟,但我不能把手指放在它上面
    • 感谢您的代码,@scleronomic。我不知道 scipy.stats。我只知道数学。
    猜你喜欢
    • 1970-01-01
    • 2019-04-23
    • 2016-04-22
    • 2019-01-22
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    相关资源
    最近更新 更多