Я пытаюсь повернуть 3D-массив в julia, как если бы он представлял физический объект в 3D-пространстве. По сути, я хочу знать, есть ли способ повернуть массив с шагом 90 градусов по осям x, y и/или z.
В 2D это было бы примерно так, если бы я вращал против часовой стрелки...
1 2 3 3 6 9
4 5 6 -----> 2 5 8
7 8 9 1 4 7
Я бы хотел, чтобы та же логика применялась и в 3D.
Любая помощь приветствуется.
Для двумерных матриц у вас есть такие функции, как rotl90
, rotr90
и rot180
. Их можно комбинировать с mapslices
, чтобы получить желаемый эффект. В примере ниже показан поворот по измерениям 1
и 2
для каждого разреза массива в измерении 3
.
julia> A=collect(reshape(1:27,3,3,3))
3×3×3 Array{Int64,3}:
[:, :, 1] =
1 4 7
2 5 8
3 6 9
[:, :, 2] =
10 13 16
11 14 17
12 15 18
[:, :, 3] =
19 22 25
20 23 26
21 24 27
julia> mapslices(rotr90,A,dims=[1,2])
3×3×3 Array{Int64,3}:
[:, :, 1] =
3 2 1
6 5 4
9 8 7
[:, :, 2] =
12 11 10
15 14 13
18 17 16
[:, :, 3] =
21 20 19
24 23 22
27 26 25
Великолепен не ответ, а гибкость языка Julia!
Отличный ответ, хотя я понятия не имею, для чего вам это нужно.