代码之家  ›  专栏  ›  技术社区  ›  William

Numpy如何使用np.cumprod对python函数进行矢量化

  •  0
  • William  · 技术社区  · 3 年前

    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
    

    我做错了什么?有朋友能帮忙吗?

    1 回复  |  直到 3 年前
        1
  •  2
  •   Warren Weckesser    3 年前

    你不需要 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*... .

    推荐文章