# How to find min/max by column from a matrix with missing values?

**URL:** <https://discourse.julialang.org/t/how-to-find-min-max-by-column-from-a-matrix-with-missing-values/38372>\
**Category:** General Usage\
**Created:** [April 28, 2020, 1:47pm UTC](https://discourse.julialang.org/t/how-to-find-min-max-by-column-from-a-matrix-with-missing-values/38372 "2020-04-28T13:47:31Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![sylvaticus](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sylvaticus/32/203883_2.png) [@sylvaticus](https://discourse.julialang.org/u/sylvaticus)\
**Post date:** [April 28, 2020, 1:47pm UTC](https://discourse.julialang.org/t/how-to-find-min-max-by-column-from-a-matrix-with-missing-values/38372/1 "2020-04-28T13:47:31Z")

</div>

This doesn’t (obviously) work:

```julia
X = [1 10.5;1.5 missing; 1.8 8; 1.7 15; 3.2 40; 3.6 32; 3.3 38; missing -2.3; 5.2 -2.4]
minX = minimum(X,dims=1)
maxX = maximum(X,dims=1)

```

But the problem is that `skipmissing()` doesn’t keep the shape, so when I want to find min/max by each column, what should I implement ?

---

<div class="post-metadata">

**Author:** ![oheil](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oheil/32/220745_2.png) [@oheil](https://discourse.julialang.org/u/oheil)\
**Post date:** [April 28, 2020, 2:27pm UTC](https://discourse.julialang.org/t/how-to-find-min-max-by-column-from-a-matrix-with-missing-values/38372/2 "2020-04-28T14:27:37Z")

</div>

`minX = [minimum(skipmissing(X[:,col])) for col in 1:size(X)[2] ]`

Drawback: returns a

```julia
2-element Array{Float64,1}

```

and not a

```julia
1×2 Array{Float64,2}

```

as expected. But maybe this doesn’t matter.

---

<div class="post-metadata">

**Author:** ![affans](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/affans/32/11911_2.png) [@affans](https://discourse.julialang.org/u/affans)\
**Post date:** [April 28, 2020, 2:27pm UTC](https://discourse.julialang.org/t/how-to-find-min-max-by-column-from-a-matrix-with-missing-values/38372/3 "2020-04-28T14:27:59Z")

</div>

Broadcasting solution:

```julia
julia> minimum.(skipmissing.(eachcol(X)))
2-element Array{Float64,1}:
  1.0
 -2.4

```

---

<div class="post-metadata">

**Author:** ![oheil](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oheil/32/220745_2.png) [@oheil](https://discourse.julialang.org/u/oheil)\
**Post date:** [April 28, 2020, 2:28pm UTC](https://discourse.julialang.org/t/how-to-find-min-max-by-column-from-a-matrix-with-missing-values/38372/4 "2020-04-28T14:28:49Z")

</div>

I must stop thinking in comprehensions 😁

---

<div class="post-metadata">

**Author:** ![nalimilan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nalimilan/32/147_2.png) [@nalimilan](https://discourse.julialang.org/u/nalimilan)\
**Post date:** [April 28, 2020, 5:32pm UTC](https://discourse.julialang.org/t/how-to-find-min-max-by-column-from-a-matrix-with-missing-values/38372/5 "2020-04-28T17:32:43Z")

</div>

FWIW I made [a pull request](https://github.com/JuliaLang/julia/pull/28027/) to support this some time ago. It should be faster than `eachrow` (but not than `eachcol` probably) for `Array`s since it processes continuous blocks of memory, but that also requires quite a bit of code.

---

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [April 28, 2020, 6:02pm UTC](https://discourse.julialang.org/t/how-to-find-min-max-by-column-from-a-matrix-with-missing-values/38372/6 "2020-04-28T18:02:58Z")

</div>

> [@oheil](#):
>
> I must stop thinking in comprehensions 😁

Not necessarily. This is faster than the broadcasted version, with less allocation:

```julia-auto
[minimum(skipmissing(col)) for col in eachcol(X)]

```

---

<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:** [April 28, 2020, 8:29pm UTC](https://discourse.julialang.org/t/how-to-find-min-max-by-column-from-a-matrix-with-missing-values/38372/7 "2020-04-28T20:29:54Z")

</div>

Also try `extrema`
