【问题标题】:Numpy how to vectorize python function use np.cumprodNumpy 如何使用 np.cumprod 向量化 python 函数
【发布时间】:2021-10-06 01:58:40
【问题描述】:

我有一个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

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

【问题讨论】:

    标签: python python-3.x numpy array-broadcasting numpy-ufunc


    【解决方案1】:

    您不需要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, ...] 并返回一个包含[x0, x0*x1, x0*x1*x2, ...] 的相同长度的数组。 prod 返回标量,它是所有元素 x0*x1*x2*... 的乘积。

    【讨论】:

    猜你喜欢
    • 2021-11-26
    • 2021-11-26
    • 2015-08-05
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    相关资源
    最近更新 更多