代码:
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的任何调用似乎都会发生这种情况。
发布于 2020-09-22 06:11:04
使用p = np.arange(0,n+1),您可以使用整数数组0,...,n初始化。这使得binom.pmf(...)在分配给p[i]时被转换为整数。解决方案是使p成为一个浮点数数组。默认情况下,np.zeros()会创建一个浮动数组。同样的问题也适用于profit。
将其应用到代码中如下所示:
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)https://stackoverflow.com/questions/64003596
复制相似问题