小编Ily*_*kin的帖子

类似的代码(对于指数加权偏差)在Haskell中比在Python中慢

我在python3和Haskell(编译)中实现了指数加权移动平均值(ewma).这需要大约相同的时间.但是当这个函数被应用两次时,haskell版本会无法预测地减慢速度(超过1000次,而python版本仅慢2倍).

Python3版本:

import numpy as np
def ewma_f(y, tau):
    a = 1/tau
    avg = np.zeros_like(y)
    for i in range(1, len(y)):
        avg[i] = a*y[i-1]+(1-a)*avg[i-1]
    return avg
Run Code Online (Sandbox Code Playgroud)

Haskell列表:

ewmaL :: [Double] -> Double -> [Double]
ewmaL ys tau = reverse $ e (reverse ys) (1.0/tau)
    where e [x] a    = [a*x]
          e (x:xs) a = (a*x + (1-a)*(head $ e xs a) : e xs a)
Run Code Online (Sandbox Code Playgroud)

Haskell与数组:

import qualified Data.Vector as V
ewmaV :: V.Vector Double -> Double -> V.Vector …
Run Code Online (Sandbox Code Playgroud)

python performance haskell weighted-average

9
推荐指数
1
解决办法
313
查看次数

标签 统计

haskell ×1

performance ×1

python ×1

weighted-average ×1