Translating Arrays in Julia
Description
Using circshifr(A, (n,m))
, you can shift the rows of the array A $n$ positions down, and the columns $m$ positions to the right. (n,m)
must be a tuple of integers, and negative numbers are also possible. If negative, it shifts in the opposite direction.
For arrays of 3 dimensions or more, it is applied to each smallest 2-dimensional array respectively.
Code
2D array
julia> A = transpose(reshape(1:25,5,5))
5×5 LinearAlgebra.Transpose{Int64,Base.ReshapedArray{Int64,2,UnitRange{Int64},Tuple{}}}:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
julia> circshift(A, (-1,0))
5×5 Array{Int64,2}:
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
1 2 3 4 5
julia> circshift(A, (0,3))
5×5 Array{Int64,2}:
3 4 5 1 2
8 9 10 6 7
13 14 15 11 12
18 19 20 16 17
23 24 25 21 22
julia> circshift(A, (-1,3))
5×5 Array{Int64,2}:
8 9 10 6 7
13 14 15 11 12
18 19 20 16 17
23 24 25 21 22
3 4 5 1 2
Higher-dimensional array
julia> B = reshape(1:4*4*3,4,4,3)
4×4×3 reshape(::UnitRange{Int64}, 4, 4, 3) with eltype Int64:
[:, :, 1] =
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
[:, :, 2] =
17 21 25 29
18 22 26 30
19 23 27 31
20 24 28 32
[:, :, 3] =
33 37 41 45
34 38 42 46
35 39 43 47
36 40 44 48
julia> circshift(B,(-1,0))
4×4×3 Array{Int64,3}:
[:, :, 1] =
2 6 10 14
3 7 11 15
4 8 12 16
1 5 9 13
[:, :, 2] =
18 22 26 30
19 23 27 31
20 24 28 32
17 21 25 29
[:, :, 3] =
34 38 42 46
35 39 43 47
36 40 44 48
33 37 41 45
julia> circshift(B,(0,2))
4×4×3 Array{Int64,3}:
[:, :, 1] =
9 13 1 5
10 14 2 6
11 15 3 7
12 16 4 8
[:, :, 2] =
25 29 17 21
26 30 18 22
27 31 19 23
28 32 20 24
[:, :, 3] =
41 45 33 37
42 46 34 38
43 47 35 39
44 48 36 40
julia> circshift(B,(-1,2))
4×4×3 Array{Int64,3}:
[:, :, 1] =
10 14 2 6
11 15 3 7
12 16 4 8
9 13 1 5
[:, :, 2] =
26 30 18 22
27 31 19 23
28 32 20 24
25 29 17 21
[:, :, 3] =
42 46 34 38
43 47 35 39
44 48 36 40
41 45 33 37
julia> C = reshape(1:3*3*2*4,3,3,2,4)
3×3×2×4 reshape(::UnitRange{Int64}, 3, 3, 2, 4) with eltype Int64:
[:, :, 1, 1] =
1 4 7
2 5 8
3 6 9
[:, :, 2, 1] =
10 13 16
11 14 17
12 15 18
[:, :, 1, 2] =
19 22 25
20 23 26
21 24 27
[:, :, 2, 2] =
28 31 34
29 32 35
30 33 36
[:, :, 1, 3] =
37 40 43
38 41 44
39 42 45
[:, :, 2, 3] =
46 49 52
47 50 53
48 51 54
[:, :, 1, 4] =
55 58 61
56 59 62
57 60 63
[:, :, 2, 4] =
64 67 70
65 68 71
66 69 72
julia> circshift(C,(1,1))
3×3×2×4 Array{Int64,4}:
[:, :, 1, 1] =
9 3 6
7 1 4
8 2 5
[:, :, 2, 1] =
18 12 15
16 10 13
17 11 14
[:, :, 1, 2] =
27 21 24
25 19 22
26 20 23
[:, :, 2, 2] =
36 30 33
34 28 31
35 29 32
[:, :, 1, 3] =
45 39 42
43 37 40
44 38 41
[:, :, 2, 3] =
54 48 51
52 46 49
53 47 50
[:, :, 1, 4] =
63 57 60
61 55 58
62 56 59
[:, :, 2, 4] =
72 66 69
70 64 67
71 65 68
Environment
- OS: Windows10
- Version: 1.5.3 (2020-11-09)