Swift

Swiftで移動平均を求める

More than 1 year has passed since last update.

センサの値なんかを平滑化するために移動平均を使おうと思って書いてみました。

extensionにしとくと便利かな?と思ってArrayのextensionにする形で書いてみました。
FloatingPointに準拠したArrayでのみ使えるように制限してあります。

extension Array where Element: FloatingPoint {
    func simpleMovingAverage(scope:Int) -> [Element]? {
        guard self.count >= scope else { return nil }
        var result = [Element]()
        for endIndex in scope...self.count {
            let lower = endIndex-scope
            let upper = endIndex
            let range = Range(uncheckedBounds: (lower: lower, upper: upper))
            let sum = self[range].reduce(0) { (v1, v2) -> Element in return v1+v2 }
            let avg = sum/Element(scope)
            result.append(avg)
        }
        return result
    }
}

https://gist.github.com/tamaki-shingo/d41e9c6c54b7ed248641fe59a0bc3001