Wea*_*ped 0 python optimization
我有一个我正在计算的脚本:
def sumsquared(arr):
sum = 0
idx = 0
len = arr.__len__()
while idx < (len - 1):
sum = sum + (arr[idx] * arr[idx]) + (arr[idx+1] * arr[idx+1])
idx = idx + 2
return sum
Run Code Online (Sandbox Code Playgroud)
上面的函数在循环中调用,循环填充两个列表并调用此函数两次:第一次使用len~1024项目列表,第二次使用len~44100项目.根据输入,循环本身可以运行100到100000次.
对于小尺寸输入,cProfile基于概要分析通知我:
ncalls tottime percall cumtime percall filename:lineno(function)
---------------------------------------------------------------------
2560 12.065 0.005 12.065 0.005 beat.py:8(sumsquared)
Run Code Online (Sandbox Code Playgroud)
这大约是脚本总运行时间的95%.有什么方法可以加快功能吗?
你的功能很奇怪.它所做的只是计算元素的平方和,除非如果有奇数个元素,它会丢弃最后一个元素.由于某种原因,您一次添加两个,但这不会影响最终结果.
为了加快速度,您可以使用numpy而不是编写自己的函数.
>>> x = np.array([1, 2, 3, 4, 5])
>>> sumsquared(x)
30
>>> (x[:2*(len(x)//2)]**2).sum()
30
Run Code Online (Sandbox Code Playgroud)
通常,如果您有数千个数字的列表,则使用numpy数组可能会带来重大的性能提升.
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |