Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Slice matrix by discrete ranges in julia

Given a 2-D matrix:

arr = rand(10,10)

I would like to slice it by discrete ranges, e.g. row 2 to 4 followed by row 6 to 8, leading to a 6x10 matrix. Since I haven't found a similar existing question and solution, I tried

arr[[2:4,6:8],:]
arr[[[2:4],[6:8]],:]

and something similar, but these don't work.

I could use

vcat(arr[2:4,:],arr[6:8,:])

However, it seems awkward, is there a better way to slice by discrete ranges in julia? Thanks.

like image 500
EuRoXy Avatar asked Dec 07 '25 11:12

EuRoXy


1 Answers

You were almost correct. This is the way to do it:

julia> arr = [(i,j) for i in 1:10, j in 1:10]
10×10 Array{Tuple{Int64,Int64},2}:
 (1, 1)   (1, 2)   (1, 3)   (1, 4)   (1, 5)   (1, 6)   (1, 7)   (1, 8)   (1, 9)   (1, 10)
 (2, 1)   (2, 2)   (2, 3)   (2, 4)   (2, 5)   (2, 6)   (2, 7)   (2, 8)   (2, 9)   (2, 10)
 (3, 1)   (3, 2)   (3, 3)   (3, 4)   (3, 5)   (3, 6)   (3, 7)   (3, 8)   (3, 9)   (3, 10)
 (4, 1)   (4, 2)   (4, 3)   (4, 4)   (4, 5)   (4, 6)   (4, 7)   (4, 8)   (4, 9)   (4, 10)
 (5, 1)   (5, 2)   (5, 3)   (5, 4)   (5, 5)   (5, 6)   (5, 7)   (5, 8)   (5, 9)   (5, 10)
 (6, 1)   (6, 2)   (6, 3)   (6, 4)   (6, 5)   (6, 6)   (6, 7)   (6, 8)   (6, 9)   (6, 10)
 (7, 1)   (7, 2)   (7, 3)   (7, 4)   (7, 5)   (7, 6)   (7, 7)   (7, 8)   (7, 9)   (7, 10)
 (8, 1)   (8, 2)   (8, 3)   (8, 4)   (8, 5)   (8, 6)   (8, 7)   (8, 8)   (8, 9)   (8, 10)
 (9, 1)   (9, 2)   (9, 3)   (9, 4)   (9, 5)   (9, 6)   (9, 7)   (9, 8)   (9, 9)   (9, 10)
 (10, 1)  (10, 2)  (10, 3)  (10, 4)  (10, 5)  (10, 6)  (10, 7)  (10, 8)  (10, 9)  (10, 10)

julia> arr[[2:4; 6:8], :]
6×10 Array{Tuple{Int64,Int64},2}:
 (2, 1)  (2, 2)  (2, 3)  (2, 4)  (2, 5)  (2, 6)  (2, 7)  (2, 8)  (2, 9)  (2, 10)
 (3, 1)  (3, 2)  (3, 3)  (3, 4)  (3, 5)  (3, 6)  (3, 7)  (3, 8)  (3, 9)  (3, 10)
 (4, 1)  (4, 2)  (4, 3)  (4, 4)  (4, 5)  (4, 6)  (4, 7)  (4, 8)  (4, 9)  (4, 10)
 (6, 1)  (6, 2)  (6, 3)  (6, 4)  (6, 5)  (6, 6)  (6, 7)  (6, 8)  (6, 9)  (6, 10)
 (7, 1)  (7, 2)  (7, 3)  (7, 4)  (7, 5)  (7, 6)  (7, 7)  (7, 8)  (7, 9)  (7, 10)
 (8, 1)  (8, 2)  (8, 3)  (8, 4)  (8, 5)  (8, 6)  (8, 7)  (8, 8)  (8, 9)  (8, 10)

Note ; not , in [2:4; 6:8]. Here you can find more information about concatenation functionalities in Julia.

like image 167
Bogumił Kamiński Avatar answered Dec 09 '25 02:12

Bogumił Kamiński