首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >binom.pmf只返回零

binom.pmf只返回零
EN

Stack Overflow用户
提问于 2020-09-22 05:32:45
回答 1查看 135关注 0票数 0

代码:

代码语言:javascript
复制
def expected_profit(n):
    total = 0
    X = np.arange(0,n+1)
    p = np.arange(0,n+1)
    profit = np.arange(0,n+1)
    for i in list(range(1,n+1)):
        print("X_i:", X[i])
        p[i] = binom.pmf(X[i],n,19/20)
        print(p[i])
        if X[i] > 100:
            profit[i] = 50*n-60*(X[i]-100)
        else:
            profit[i] = 50*n
        total += profit[i]*p[i]
    return total
expected_profit(10)
>>>0

由于某种原因,每次迭代之后,p[i]等于零。然而,当我手动输入(例如) binom.pmf(10,10,19/20)时,我会得到一个非零的答案。这里有什么问题?

在函数调用中,对binom.pmf的任何调用似乎都会发生这种情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-22 06:11:04

使用p = np.arange(0,n+1),您可以使用整数数组0,...,n初始化。这使得binom.pmf(...)在分配给p[i]时被转换为整数。解决方案是使p成为一个浮点数数组。默认情况下,np.zeros()会创建一个浮动数组。同样的问题也适用于profit

将其应用到代码中如下所示:

代码语言:javascript
复制
from scipy.stats import binom
import numpy as np

def expected_profit(n):
    n = 10
    total = 0
    X = np.arange(0, n + 1)
    p = np.zeros(n + 1, dtype=float)
    profit = np.zeros(n + 1, dtype=float)
    for i in range(1, n + 1):
        p[i] = binom.pmf(X[i], n, 19/20)
        if X[i] > 100:
            profit[i] = 50 * n - 60 * (X[i] - 100)
        else:
            profit[i] = 50 * n
        total += profit[i] * p[i]
        
expected_profit(10)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64003596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档