Я пытаюсь понять, как разрезать матрицу каждые 2 столбца. Например, если у нас есть
A=[[1 2 3 4 5 6];[7 8 9 10 11 12]]
2×6 Matrix{Int64}:
1 2 3 4 5 6
7 8 9 10 11 12
то я хотел бы вернуть 3 матрицы, нарезанные каждые 2 столбца, то есть трехмерный массив с 3 матрицами,
2×2×3 Array{Int64, 3}:
[:, :, 1] =
1 2
7 8
[:, :, 2] =
3 4
9 10
[:, :, 3] =
5 6
11 12
Одна вещь, которую я пробовал, - это функция eachslice,
collect(eachslice(A,dims=2))
6-element Vector{SubArray{Int64, 1, Matrix{Int64}, Tuple{Base.Slice{Base.OneTo{Int64}}, Int64}, true}}:
[1, 7]
[2, 8]
[3, 9]
[4, 10]
[5, 11]
[6, 12]
но это разрезает каждый столбец, но я хочу разрезать каждые два столбца!
Заранее спасибо.
Это просто переделка. Изменяет общую память (например, представления), поэтому вам следует copy
это сделать, если вы хотите, чтобы оно не зависело от оригинала A
:
julia> reshape(A, 2, 2, 3)
2×2×3 Array{Int64, 3}:
[:, :, 1] =
1 2
7 8
[:, :, 2] =
3 4
9 10
[:, :, 3] =
5 6
11 12
Но если вы действительно хотите, вы также можете выразить это как индексацию:
julia> A[:, [1:2 3:4 5:6]]
2×2×3 Array{Int64, 3}:
[:, :, 1] =
1 2
7 8
[:, :, 2] =
3 4
9 10
[:, :, 3] =
5 6
11 12
Это идеально, спасибо! Еще не привык к функции изменения формы.