每 2 列切片矩阵

Slice matrix every 2 columns

我想弄清楚如何每 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

然后我想 return 3 个矩阵,每 2 列切片,即具有 3 个矩阵的 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]

但这沿着每一列切片,但我想沿着每两列切片!

提前致谢。

这只是重塑。重塑共享内存(如视图),因此如果您希望它独立于原始 A:

,您应该 copy
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