每 2 列对矩阵进行切片

Slice matrix every 2 columns

提问人: 提问时间:4/6/2022 更新时间:4/6/2022 访问量:71

问:

我正在尝试弄清楚如何每 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

那么我想返回每 2 列切片的 3 个矩阵,即一个具有 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]

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

提前致谢。

组矩 多维数组 Julia 切片

评论


答:

3赞 mbauman 4/6/2022 #1

这只是一个重塑。重塑共享内存(如视图),因此,如果您希望它独立于原始内存,则应这样做:copyA

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

评论

0赞 4/6/2022
这太完美了,谢谢!还不习惯重塑功能。