gpt4 book ai didi

Python NumPy : sum every 3 rows (converting monthly to quarterly)

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:36 24 4
gpt4 key购买 nike

我有一组包含每月数据的一维 numpy 数组。我需要按季度聚合它们,创建一个新数组,其中第一项是旧数组前 3 项的总和,等等。

我正在使用这个函数,x =3 :

def sumeveryxrows(myarray,x):
return([sum(myarray[x*n:x*n+x]) for n in range( int(len(myarray)/x))])

它有效,但你能想出更快的方法吗?我剖析了一下,97%的时间都花在了__getitem__上

最佳答案

您可以使用 reshape(假设您的数组的大小是 x 的倍数):

sumeveryxrows = lambda myarray, x: myarray.reshape((myarray.shape[0] / x, x)).sum(1)

在具有 30000000 值的数组上,上面的代码不到 .3s:

>>> a = numpy.random.rand(30000000)
>>> cProfile.run('sumeveryxrows(a, 3)')
8 function calls in 0.263 seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.258 0.258 <stdin>:1(<lambda>)
1 0.005 0.005 0.263 0.263 <string>:1(<module>)
1 0.000 0.000 0.258 0.258 _methods.py:31(_sum)
1 0.000 0.000 0.263 0.263 {built-in method exec}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.258 0.258 0.258 0.258 {method 'reduce' of 'numpy.ufunc' objects}
1 0.000 0.000 0.000 0.000 {method 'reshape' of 'numpy.ndarray' objects}
1 0.000 0.000 0.258 0.258 {method 'sum' of 'numpy.ndarray' objects}

关于Python NumPy : sum every 3 rows (converting monthly to quarterly),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31319532/

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