gpt4 book ai didi

python - 取产品然后对类似列表的对象求和的简单矢量化

转载 作者:行者123 更新时间:2023-11-28 22:30:46 25 4
gpt4 key购买 nike

我想做一个看似简单的操作,也许我只是被阻止了,但是执行此计算的最快方法是什么?

mret = 0
for i in range(1, len(monthly_rets)):
mret += monthly_rets[i:].prod()

monthly_rets 是一个长度为 2-540 的 np.array(即它的长度可以在 2 到 540 之间变化,它不一定是一个 np.array)月度因子返回(对于问题)。一定有一些聪明的技巧可以用来避免使用 for 循环并加快速度吗?

最佳答案

您可以使用 np.cumprod 的组合和 np.sum .这样的事情应该有效(至少对于 numpy 数组):

mret = monthly_rets[:0:-1].cumprod().sum()

np.cumprod 计算数组的累积乘积,这意味着如果您有一个包含三个元素 a[0] 的数组 aa[1]a[2] a.cumprod() 将为您提供数组 [a[0], a[0]*a[1], a[0]*a[1]*a[2]]。现在你想拥有类似的东西。这是通过使用切片 [:0:-1] 完成的,它将向后遍历数组,以倒数第二个元素结束,这样 a[:0:-1].cumprod () 会给你 [a[2], a[1]*a[2]]sum() 将对所有元素求和以得出结果。 (感谢@B.M. 指出正确的切片。)

顺便说一句,我使用 ipython%timeit 检查了 540 个随机数数组(对应于您最大的数组)的性能优势。我得到了 2.3ms/10µs=230 的加速。即使算上 %timeit 警告(可能不正确)的缓存效果,您肯定至少有 40 倍的加速。

关于python - 取产品然后对类似列表的对象求和的简单矢量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41983818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com