gpt4 book ai didi

optimization - 为什么我的移动平均算法这么慢?

转载 作者:行者123 更新时间:2023-12-03 16:28:27 25 4
gpt4 key购买 nike

我编写了一个 Fortran 函数,它以非常直接的方式计算一维数字数组的移动平均值:

function moving_average(data, w)

implicit none

integer, intent(in) :: w
real(8), intent(in) :: data(:)

integer :: n, i
real(8) :: moving_average(size(data)-w+1)

n = w-1

do i=1, size(data)-n
moving_average(i) = mean(data(i:i+n))
end do

end function

函数 mean 定义为:

real(8) function mean(data)

implicit none

real(8), dimension(:), intent(in) :: data

mean = sum(data)/size(data)

end function

在我的笔记本电脑上运行函数 moving_average 时,数据集为 100000 个数字,窗口宽度为 1000,需要 0.1 秒。但是,this post 中的函数 running_mean使用 numpy 只需 1 毫秒。为什么我的算法这么慢?

最佳答案

您的算法的阶数为 O(n*m),其中 n 是移动平均线的大小,m 是数组的大小。

每次计算数组 moving_average 中的一个点时,您都​​会执行以下步骤:

  • 提取数组的一部分
  • 计算该切片的总和
  • 除以常量n

但是,moving_average(i)moving_average(i+1) 有如下关系:

moving_average(i+i) = moving_average(i) + (data(i+n) - data(i-1))/n

当你使用它时,你可以将计算时间从 O(n*m) 减少到 O(m)

关于optimization - 为什么我的移动平均算法这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57989394/

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