# Unique (indices) method similar to MATLAB

**URL:** <https://discourse.julialang.org/t/unique-indices-method-similar-to-matlab/34446>\
**Category:** General Usage\
**Tags:** question\
**Created:** [February 11, 2020, 12:35am UTC](https://discourse.julialang.org/t/unique-indices-method-similar-to-matlab/34446 "2020-02-11T00:35:27Z")\
**Posts on this page:** 1\
**Showing post:** 7

<div class="post-metadata">

**Author:** ![t-bltg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/t-bltg/32/25526_2.png) [@t-bltg](https://discourse.julialang.org/u/t-bltg)\
**Post date:** [December 8, 2023, 8:04pm UTC](https://discourse.julialang.org/t/unique-indices-method-similar-to-matlab/34446/7 "2023-12-08T20:04:36Z")

</div>

Here is a pure Julia implementation of MATLAB’s `unique`, which returns `ic` contrary to the [previous answer](https://discourse.julialang.org/t/unique-indices-method-similar-to-matlab/34446/6) using `GroupSlices` :

```julia
uniq(A; dims=1) = begin
  @assert ndims(A) ∈ (1, 2)
  slA = ndims(A) > 1 ? eachslice(A; dims) : A

  ia = unique(i -> slA[i], axes(A, dims))
  sort!(ia; by=i -> slA[i])

  C = stack(slA[ia]; dims)
  slC = ndims(A) > 1 ? eachslice(C; dims) : C

  ic = map(r -> findfirst(==(slA[r]), slC), axes(A, dims))

  C, ia, ic
end

```

And basic testing:

```julia
using Test

main() = begin
  let A = [
    3 1
    3 3
    1 3
    3 2
    2 3
    1 1
    1 2
    2 3
    3 3
    3 3
  ]
    C, ia, ic = uniq(A; dims=1)
    @test ia == [6, 7, 3, 5, 1, 4, 2]
    @test ic == [5, 7, 3, 6, 4, 1, 2, 4, 7, 7]
    @test C == A[ia, :]
    @test A == C[ic, :]

    C, ia, ic = uniq(A'; dims=2)
    @test ia == [6, 7, 3, 5, 1, 4, 2]
    @test ic == [5, 7, 3, 6, 4, 1, 2, 4, 7, 7]
    @test C == A'[:, ia]
    @test A' == C[:, ic]
  end

  let A = [9, 2, 9, 5]
    C, ia, ic = uniq(A)
    @test ia == [2, 4, 1]
    @test ic == [3, 1, 3, 2]
    @test C == A[ia]
    @test A == C[ic]
  end
end

main()

```

---

_[View the full topic](https://discourse.julialang.org/t/unique-indices-method-similar-to-matlab/34446)._
