# Smoothing Noisy Data using Moving Mean

**URL:** https://discourse.julialang.org/t/smoothing-noisy-data-using-moving-mean/65329
**Category:** General Usage
**Tags:** data, smoothing
**Created:** [July 26, 2021, 7:50pm UTC](https://discourse.julialang.org/t/smoothing-noisy-data-using-moving-mean/65329 "2021-07-26T19:50:39Z")
**Posts on this page:** 1
**Showing post:** 7

<div class="post-metadata">

### Author: ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)
#### Post date: [September 3, 2021, 10:17pm UTC](https://discourse.julialang.org/t/smoothing-noisy-data-using-moving-mean/65329/7 "2021-09-03T22:17:52Z")

</div>

For a package-free moving average, see @tim.holy’s solution [here](https://julialang.org/blog/2016/02/iteration/#writing_multidimensional_algorithms_with_cartesianindex_iterators), adapted as follows for `m` odd integer \> 1:

```julia
function moving_average(A::AbstractArray, m::Int)
    out = similar(A)
    R = CartesianIndices(A)
    Ifirst, Ilast = first(R), last(R)
    I1 = m÷2 * oneunit(Ifirst)
    for I in R
        n, s = 0, zero(eltype(out))
        for J in max(Ifirst, I-I1):min(Ilast, I+I1)
            s += A[J]
            n += 1
        end
        out[I] = s/n
    end
    return out
end

```

---

_[View the full topic](https://discourse.julialang.org/t/smoothing-noisy-data-using-moving-mean/65329)._
