pval = np.array([1,1,1,1,1,0.999709, 0.99973,0.999743,0.999706, 0.999675, 0.99965, 0.999629]) age1=4 age2=8 def getnpxtocert(mt, age, age2): val = mt[age] for i in range(age + 1,age2): val = val * mt[i] return val getnpxtocertv(pval,age1,age2)
输出为:
0.9991822227268075
然后我尝试使用cumprod将其矢量化:
def getnpxtocertv(mt, age, age2): return (mt[age]*np.cumprod(mt[age+1:age2])).sum() getnpxtocert(pval,age1,age2)
但结果是:
2.998330301296807
我做错了什么?有朋友能帮忙吗?
你不需要 cumprod 和 sum . 只用 prod :
cumprod
sum
prod
def getnpxtocert_v2(mt, age, age2): return np.prod(mt[age:age2])
比较:
In [23]: getnpxtocert(pval, age1, age2) Out[23]: 0.9991822227268075 In [24]: getnpxtocert_v2(pval, age1, age2) Out[24]: 0.9991822227268075
康普罗德 [x0, x1, x2, ...] 并返回一个长度相同的数组,其中包含 [x0, x0*x1, x0*x1*x2, ...] 戳 返回所有元素乘积的标量 x0*x1*x2*... .
康普罗德
[x0, x1, x2, ...]
[x0, x0*x1, x0*x1*x2, ...]
戳
x0*x1*x2*...