# Cummean, cumall, and cumany

**URL:** https://discourse.julialang.org/t/cummean-cumall-and-cumany/46219
**Category:** General Usage
**Created:** [September 7, 2020, 7:55pm UTC](https://discourse.julialang.org/t/cummean-cumall-and-cumany/46219 "2020-09-07T19:55:45Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![tk3369](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tk3369/32/2824_2.png) [@tk3369](https://discourse.julialang.org/u/tk3369)
#### Post date: [September 7, 2020, 7:55pm UTC](https://discourse.julialang.org/t/cummean-cumall-and-cumany/46219/1 "2020-09-07T19:55:45Z")

</div>

Currently, these functions exist in Base:

- cumsum
- cumprod
- cummin (using accumulate)
- cummax (using accumulate)

I’m just checking out dplyr’s functions and they have

- cummean
- cumall (logical bit vector)
- cumany (logical bit vector)

Does it make sense to add these to Base? Or perhaps all these functions should be moved to Statistics?

---

<div class="post-metadata">

### Author: ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)
#### Post date: [September 7, 2020, 8:03pm UTC](https://discourse.julialang.org/t/cummean-cumall-and-cumany/46219/2 "2020-09-07T20:03:38Z")

</div>

Well, we have [`accumulate`](https://docs.julialang.org/en/latest/base/arrays/#Base.accumulate), in terms of which `cumall` is just `accumulate(&, A)` and `cumany` is `accumulate(|, A)`, so it doesn’t seem worthwhile adding specific functions for these.

`cummean(A) = cumsum(A) ./ (1:length(A))` is _slightly_ more complicated, at least if you want to eliminate the allocation of a temporary array. If it’s a common operation it might make sense in Statistics. However, I can’t seem to find any record of anyone ever asking for this function before, so that doesn’t seem to indicate a big demand?

---

<div class="post-metadata">

### Author: ![tbeason](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tbeason/32/15898_2.png) [@tbeason](https://discourse.julialang.org/u/tbeason)
#### Post date: [September 7, 2020, 8:10pm UTC](https://discourse.julialang.org/t/cummean-cumall-and-cumany/46219/3 "2020-09-07T20:10:19Z")

</div>

Ironically, I am currently porting some code from Matlab that contains the equivalent of `cummean` as described here. So, 👍 from me!

---

<div class="post-metadata">

### Author: ![tk3369](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tk3369/32/2824_2.png) [@tk3369](https://discourse.julialang.org/u/tk3369)
#### Post date: [September 7, 2020, 8:23pm UTC](https://discourse.julialang.org/t/cummean-cumall-and-cumany/46219/4 "2020-09-07T20:23:53Z")

</div>

Yeah I couldn’t find any previous requests from the julia repo either.

Looks like Bayesian people want it?

[https://juliahub.com/ui/CodeSearch?q=cummean%20&u=define&t=all](https://juliahub.com/ui/CodeSearch?q=cummean%20&u=define&t=all)

---

<div class="post-metadata">

### Author: ![piever](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/piever/32/1815_2.png) [@piever](https://discourse.julialang.org/u/piever)
#### Post date: [September 7, 2020, 8:37pm UTC](https://discourse.julialang.org/t/cummean-cumall-and-cumany/46219/5 "2020-09-07T20:37:29Z")

</div>

Just to do some publicity to a couple of really nice packages, you could do the cumulative mean with OnlineStats + Transducers:

```julia
julia> using OnlineStats, Transducers

julia> collect(Transducer(Mean()), 1:4)

```

(It’s one of the examples in the [docs](https://juliafolds.github.io/Transducers.jl/stable/reference/manual/#Transducers.Transducer-Tuple%7BOnlineStatsBase.OnlineStat%7D).)

---

<div class="post-metadata">

### Author: ![tbeason](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tbeason/32/15898_2.png) [@tbeason](https://discourse.julialang.org/u/tbeason)
#### Post date: [September 7, 2020, 9:26pm UTC](https://discourse.julialang.org/t/cummean-cumall-and-cumany/46219/6 "2020-09-07T21:26:04Z")

</div>

Did not know this. Thanks for sharing.

---

<div class="post-metadata">

### Author: ![xiaodai](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xiaodai/32/15937_2.png) [@xiaodai](https://discourse.julialang.org/u/xiaodai)
#### Post date: [September 8, 2020, 7:04am UTC](https://discourse.julialang.org/t/cummean-cumall-and-cumany/46219/7 "2020-09-08T07:04:23Z")

</div>

Is it fast? I thought the canonical way in Julia is `accumulate`

---

<div class="post-metadata">

### Author: ![tkf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tkf/32/17635_2.png) [@tkf](https://discourse.julialang.org/u/tkf)
#### Post date: [September 9, 2020, 6:15am UTC](https://discourse.julialang.org/t/cummean-cumall-and-cumany/46219/8 "2020-09-09T06:15:20Z")

</div>

`Transducer(::OnlineStat)` is not really for performance. It’s mainly for exposing the super rich set of functionality that exists in OnlineStats.jl to Transducers.jl-based API. OnlineStats are really “just” reducing functions obscured by the implementation detail that uses in-place mutation. So, it’d be such a pity if two libraries cannot talk to each other.
