# Positions in an array

**URL:** <https://discourse.julialang.org/t/positions-in-an-array/73157>\
**Category:** General Usage\
**Tags:** question, indexing, arrays, splitapplycombine\
**Created:** [December 15, 2021, 6:33pm UTC](https://discourse.julialang.org/t/positions-in-an-array/73157 "2021-12-15T18:33:44Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mariana](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mariana/32/15064_2.png) [@Mariana](https://discourse.julialang.org/u/Mariana)\
**Post date:** [December 15, 2021, 6:33pm UTC](https://discourse.julialang.org/t/positions-in-an-array/73157/1 "2021-12-15T18:33:44Z")

</div>

Hello!

I have a 15360x3 array and the last column may only assume three different values: -1, 1, or 2. I’d like to obtain arrays with the positions in this array where the third column assumes each of these possible values (for example, what are the lines in the array where the last column has the value of -1?).

I tried to use the `indexin` function but didn’t succeed.

---

<div class="post-metadata">

**Author:** ![trahflow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/trahflow/32/30585_2.png) [@trahflow](https://discourse.julialang.org/u/trahflow)\
**Post date:** [December 15, 2021, 6:42pm UTC](https://discourse.julialang.org/t/positions-in-an-array/73157/2 "2021-12-15T18:42:05Z")

</div>

Hi Mariana,

have you looked at `findall`?  
Maybe this example helps (EDIT: directly use the array shape you asked for):

```julia
julia> a = rand(-1:2, (15360, 3));

julia> idx = findall(==(-1), a[:, 3])
3817-element Vector{Int64}:
     8
    12
    19
    20
    21
    25
    30
    37
    38
    40
     ⋮
 15321
 15328
 15339
 15340
 15341
 15345
 15348
 15349
 15350

julia> all(a[idx, 3] .== -1)
true

```

---

<div class="post-metadata">

**Author:** ![mbaz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbaz/32/17295_2.png) [@mbaz](https://discourse.julialang.org/u/mbaz)\
**Post date:** [December 15, 2021, 6:45pm UTC](https://discourse.julialang.org/t/positions-in-an-array/73157/3 "2021-12-15T18:45:50Z")

</div>

I’m not sure I understand what you need, but this might help:

```julia
julia> A = hcat(rand(4,2),[1, -1, 2, 2])
4×3 Matrix{Float64}:
 0.118909 0.147115 1.0
 0.33352 0.229109 -1.0
 0.152295 0.923474 2.0
 0.111448 0.916297 2.0

julia> [A[row,3]==1 for row=axes(A,1), col=axes(A,2)]
4×3 Matrix{Bool}:
 1 1 1
 0 0 0
 0 0 0
 0 0 0

julia> [A[row,3]==2 for row=axes(A,1), col=axes(A,2)]
4×3 Matrix{Bool}:
 0 0 0
 0 0 0
 1 1 1
 1 1 1

```

---

<div class="post-metadata">

**Author:** ![Mariana](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mariana/32/15064_2.png) [@Mariana](https://discourse.julialang.org/u/Mariana)\
**Post date:** [December 15, 2021, 6:55pm UTC](https://discourse.julialang.org/t/positions-in-an-array/73157/4 "2021-12-15T18:55:40Z")

</div>

Thank you very much for the answers, they solved my problem!

---

<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:** [December 15, 2021, 7:33pm UTC](https://discourse.julialang.org/t/positions-in-an-array/73157/5 "2021-12-15T19:33:55Z")

</div>

You could also consider spitting out all desired indices from matrix `m` in one go:

```julia
[v .== m[:,3] for v in [-1,1,2]]

```

or better:

```julia
collect(eachcol(m[:,3] .== [-1 1 2]))

```

---

<div class="post-metadata">

**Author:** ![aplavin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aplavin/32/222056_2.png) [@aplavin](https://discourse.julialang.org/u/aplavin)\
**Post date:** [December 15, 2021, 9:51pm UTC](https://discourse.julialang.org/t/positions-in-an-array/73157/6 "2021-12-15T21:51:22Z")

</div>

Another simple way to find indices for each value in one go, without manually listing possible values:

```julia
using SplitApplyCombine
idx = groupfind(a[:, 3])

# indices of -1: idx[-1]
# indices of 1: idx[1]
# ...

```

_looks like every other data-related question here can be solved by a SplitApplyCombine function_

---

<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:** [December 15, 2021, 9:53pm UTC](https://discourse.julialang.org/t/positions-in-an-array/73157/7 "2021-12-15T21:53:58Z")

</div>

@aplavin, that is an extremelly nice solution!
