提问人: 提问时间:4/6/2022 更新时间:4/6/2022 访问量:71
每 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
那么我想返回每 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]
但这沿着每一列切片,但我想每两列切片!
提前致谢。
答:
3赞
mbauman
4/6/2022
#1
这只是一个重塑。重塑共享内存(如视图),因此,如果您希望它独立于原始内存,则应这样做: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
评论
0赞
4/6/2022
这太完美了,谢谢!还不习惯重塑功能。
评论