繁体   English   中英

有没有办法加快python中的平滑操作?

[英]Is there a way to speed up this smoothing operation in python?

我正在对列表中的一些顺序整数数据进行平滑处理。 我的平滑方法是用该数字及其邻居的均值替换每个数字。 我目前正在使用此代码:

from statistics import mean
smoothednums = [mean(nums[:2])] + [mean(nums[i-1:i+2]) for i in range(1,len(nums))]

这大大增加了我的脚本的运行时间。 有没有更好的方法来执行此操作?

https://docs.scipy.org/doc/numpy/reference/generation/numpy.convolve.html

您正在使用统一(框)过滤器描述卷积:

smoothednums = np.convolve(nums, [1/3, 1/3, 1/3]);

对于较大的窗口,您可以考虑查看窗口面积为O(1)的总面积表算法:

numpy的有效求和面积表计算

您可以通过加减每个值的1/3来避免所有切片和复制。 (浮点错误使它与您的原始错误不完全相同,但是在正常情况下应该足够接近。)我不知道它的结束速度是否更快,但似乎值得一试:

window_mean = mean(nums[:3])
smoothednums = [mean(nums[:2]), window_mean]

for i in range(2, len(nums) - 1):
    window_mean -= nums[i - 2] / 3
    window_mean += nums[i + 1] / 3
    smoothednums.append(window_mean)

smoothednums.append(mean(nums[-2:]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM