有没有一种方法可以加快python中的平滑操作?

有没有一种方法可以加快python中的平滑操作?,python,optimization,Python,Optimization,我正在对列表中的一些连续整数数据进行平滑处理。我的平滑方法是将每个数字替换为该数字及其相邻数字的平均值。我目前正在使用以下代码执行此操作: from statistics import mean smoothednums = [mean(nums[:2])] + [mean(nums[i-1:i+2]) for i in range(1,len(nums))] 这大大增加了脚本的运行时间。有没有更好的方法来执行此操作?您可以通过添加和减去每个值的1/3来避免所有的切片和复制。(浮点错误使其与原

我正在对列表中的一些连续整数数据进行平滑处理。我的平滑方法是将每个数字替换为该数字及其相邻数字的平均值。我目前正在使用以下代码执行此操作:

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

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

您可以通过添加和减去每个值的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:]))

通过加上和减去每个值的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:]))

您正在使用均匀(长方体)过滤器描述卷积:

对于较大的窗口,您可以考虑查看窗口区域大小为O(1)的求和区域表算法:

您正在使用均匀(长方体)过滤器描述卷积:

对于较大的窗口,您可以考虑查看窗口区域大小为O(1)的求和区域表算法:


这可能可以用NumPy完成。列表的大小和“显著增加”的程度可能重复?这可能可以用NumPy完成。列表的大小和“显著增加”的程度可能重复?谢谢。对于将来的读者,需要mode='same'参数才能获得与我的原始代码相同的结果。默认参数将给出不同的结果。谢谢。对于将来的读者,需要mode='same'参数才能获得与我的原始代码相同的结果。默认参数将给出不同的结果。