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

Numpy how to vectorize python function use np.cumprod

我有一个python函数:

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

我哪里做错了?有哪位朋友可以帮忙吗?

您不需要 cumprodsum。只需使用 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

cumprod 接受一个数组 [x0, x1, x2, ...] 和 returns 一个包含 [x0, x0*x1, x0*x1*x2, ...] 的相同长度的数组。 prod returns 所有元素乘积的标量 x0*x1*x2*...