# sort(A, dims=1) mixing rows

**URL:** <https://discourse.julialang.org/t/sort-a-dims-1-mixing-rows/16086>\
**Category:** Performance\
**Tags:** sort\
**Created:** [October 9, 2018, 5:46pm UTC](https://discourse.julialang.org/t/sort-a-dims-1-mixing-rows/16086 "2018-10-09T17:46:19Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)\
**Post date:** [October 9, 2018, 5:46pm UTC](https://discourse.julialang.org/t/sort-a-dims-1-mixing-rows/16086/1 "2018-10-09T17:46:20Z")

</div>

```julia
julia> slow
4811392×2 Array{Any,2}:
 "Ag" "Aga"
...
 "zzg" "z"

```

when  
`sort(slow,dims=1)`  
rows are mixed 😕 very denger ! Intuitively sort refers to the table and not each column separately. Is somthing like sortrows in ver 0.6 ?  
only

```julia
p=sortperm(slow[:,1])
slow[p,:] 

```

wokrs correcttly

Julia Version 1.0.1  
Commit [0d71392](https://github.com/JuliaLang/julia/commit/0d713926f85dfa3e4e0962215b909b8e47e94f48) (2018-09-29 19:05 UTC)  
Platform Info:  
OS: Windows (x86\_64-w64-mingw32)  
CPU: Intel(R) Core™ i7-2630QM CPU @ 2.00GHz  
WORD\_SIZE: 64  
LIBM: libopenlibm  
LLVM: libLLVM-6.0.0 (ORCJIT, sandybridge)

Paul

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [October 9, 2018, 5:49pm UTC](https://discourse.julialang.org/t/sort-a-dims-1-mixing-rows/16086/2 "2018-10-09T17:49:29Z")

</div>

Did you read the documentation for `sort`?

---

<div class="post-metadata">

**Author:** ![bennedich](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bennedich/32/4894_2.png) [@bennedich](https://discourse.julialang.org/u/bennedich)\
**Post date:** [October 9, 2018, 6:17pm UTC](https://discourse.julialang.org/t/sort-a-dims-1-mixing-rows/16086/3 "2018-10-09T18:17:30Z")

</div>

I’m not sure if it’s intuitive that sort should sort the entire row by the first column. To do that, you can use:

```julia
sortslices(slow, dims=1)

```

It sounds like you might be porting Julia 0.6 code to Julia 1.0? You should use Julia 0.7 instead during the transition, since it will tell you how to modify your code:

```julia
julia> sortrows(slow)
┌ Warning: `sortrows(A::AbstractMatrix; kws...)` is deprecated, use `sortslices(A, dims=1, kws...)` instead.
...

```

Once your code runs without deprecation warnings in Julia 0.7, switch to Julia 1.0.

---

<div class="post-metadata">

**Author:** ![bennedich](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bennedich/32/4894_2.png) [@bennedich](https://discourse.julialang.org/u/bennedich)\
**Post date:** [October 9, 2018, 6:19pm UTC](https://discourse.julialang.org/t/sort-a-dims-1-mixing-rows/16086/4 "2018-10-09T18:19:46Z")

</div>

Btw, your `sortperm` alternative does not produce the same result in case of duplicate entries in the first column (it doesn’t look at other columns to break ties).

---

<div class="post-metadata">

**Author:** ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)\
**Post date:** [October 9, 2018, 6:22pm UTC](https://discourse.julialang.org/t/sort-a-dims-1-mixing-rows/16086/5 "2018-10-09T18:22:57Z")

</div>

> [@bennedich](#):
>
> sortslices

Yes, "  
Sort a multidimensional array A along the given dimension. See sort! for a description of possible keyword  
arguments.  
" it is about Array 🙂  
please use word "for ecach col separatly "!

---

<div class="post-metadata">

**Author:** ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)\
**Post date:** [October 9, 2018, 6:32pm UTC](https://discourse.julialang.org/t/sort-a-dims-1-mixing-rows/16086/6 "2018-10-09T18:32:00Z")

</div>

> [@bennedich](#):
>
> sortrows(slow)

Warning: `sortrows(A::AbstractMatrix; kws...)` is deprecated, use `sortslices(A

0.7 told, but i am on the 1.0.1 because 0.7 has a lot of disadvantages.

Please, prepare the 0.7.1 version analogous to 1.0.1 to make the transition less difficult.  
Paul

---

<div class="post-metadata">

**Author:** ![bennedich](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bennedich/32/4894_2.png) [@bennedich](https://discourse.julialang.org/u/bennedich)\
**Post date:** [October 9, 2018, 6:36pm UTC](https://discourse.julialang.org/t/sort-a-dims-1-mixing-rows/16086/7 "2018-10-09T18:36:57Z")

</div>

> [@programista](#):
>
> i am on the 1.0.1 because 0.7 has a lot of disadvantages

What are those?

I would still highly advice to use 0.7 during the transition phase, then change to 1.0.1.

---

<div class="post-metadata">

**Author:** ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)\
**Post date:** [October 9, 2018, 6:47pm UTC](https://discourse.julialang.org/t/sort-a-dims-1-mixing-rows/16086/8 "2018-10-09T18:47:40Z")

</div>

> [@bennedich](#):
>
> What are those?
> 
> I would still highly advice to use 0.7 during the transition phase, then change to 1.0.1.

I would like that too. But there is a lot of data to readddlm () and it’s very slow at 0.7.  
eaddlm() 400 sec. vs 15 sec. on 1.0.1  
7.0.1 can be very usefull for users  
Paul

---

<div class="post-metadata">

**Author:** ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)\
**Post date:** [October 9, 2018, 6:49pm UTC](https://discourse.julialang.org/t/sort-a-dims-1-mixing-rows/16086/9 "2018-10-09T18:49:41Z")

</div>

P.s.  
for sortslices(slow, dims=1) now I am waiting more then 10 minuts! With p=sortperm(slow); slow[p,:] is in few second . ver 1.0.1

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [October 9, 2018, 7:04pm UTC](https://discourse.julialang.org/t/sort-a-dims-1-mixing-rows/16086/10 "2018-10-09T19:04:56Z")

</div>

> [@programista](#):
>
> it is about Array

You gave it an array. There is even an example

```julia
  Examples
  ≡≡≡≡≡≡≡≡≡≡

  julia> A = [4 3; 1 2]
  2×2 Array{Int64,2}:
   4 3
   1 2
  
  julia> sort(A, dims = 1)
  2×2 Array{Int64,2}:
   1 2
   4 3
  
  julia> sort(A, dims = 2)
  2×2 Array{Int64,2}:
   3 4
   1 2

```

---

<div class="post-metadata">

**Author:** ![programista](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/programista/32/5372_2.png) [@programista](https://discourse.julialang.org/u/programista)\
**Post date:** [October 9, 2018, 7:14pm UTC](https://discourse.julialang.org/t/sort-a-dims-1-mixing-rows/16086/11 "2018-10-09T19:14:14Z")

</div>

True ! But version 0.7.1 analigical to 1.0.1 can be very usufull, Plese consider it , in next version will be meny amendments. For evry 1.0.x \> 0.7.x  
Paul

---

<div class="post-metadata">

**Author:** ![bennedich](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bennedich/32/4894_2.png) [@bennedich](https://discourse.julialang.org/u/bennedich)\
**Post date:** [October 9, 2018, 7:23pm UTC](https://discourse.julialang.org/t/sort-a-dims-1-mixing-rows/16086/12 "2018-10-09T19:23:57Z")

</div>

> [@programista](#):
>
> But there is a lot of data to readddlm () and it’s very slow at 0.7.  
> eaddlm() 400 sec. vs 15 sec. on 1.0.1

That sounds like something you can work around? For example, for the purpose of upgrading your code, could you not run it with a slightly smaller dataset than 5 million entries?

Then complete the transition as quickly as possible with Julia 0.7 (no deprecation warnings), then switch to Julia 1.0.1.

> [@programista](#):
>
> P.s.  
> for sortslices(slow, dims=1) now I am waiting more then 10 minuts! With p=sortperm(slow); slow[p,:] is in few second . ver 1.0.1

Apparently `sortslices` can [be a bit inefficient](https://github.com/JuliaLang/julia/issues/9832), but didn’t that also apply to `sortrows` in Julia 0.6? Perhaps you should stick with `sortperm` then, if that works for you. (Just consider if you need to support identical values in the first column.)
