如何使用np.cumprod向量化实现Python的getnpx2循环计算函数
getnpx2 向量化实现方案
最终代码
和你之前getnpx_的实现风格对齐的向量化写法如下:
def getnpx2_(mt, age, interest): return 1 + (np.cumprod(mt[age+1:7]) / (1 + interest)**np.arange(1, 7 - age)).sum()
结果验证
使用你提供的测试参数运行:
# 原函数运行结果 print(getnpx2(mt, age, interest)) # 向量化版本运行结果 print(getnpx2_(mt, age, interest))
两次输出均为79.88888888888889,和原函数逻辑完全一致。
逻辑推导
- 原函数中
val初始值为mt[age],每次迭代乘mt[i-1]后还要除以mt[age],两者可直接抵消,因此分子等价于对mt[age+1:7]做累积乘积 - 分母的指数对应迭代次数,从1开始递增,长度和
mt[age+1:7]的长度一致,用np.arange(1,7-age)即可生成对应序列
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

