gpt4 book ai didi

julia - 切片不对称的多维 Julia 数组

转载 作者:行者123 更新时间:2023-12-02 07:00:52 24 4
gpt4 key购买 nike

采用以下 2x2x2 Julia 数组:

julia> a
2x2x2 Array{Int32,3}:
[:, :, 1] =
1 3
2 4

[:, :, 2] =
2 4
3 5

我惊讶地发现沿不同维度的切片会产生非对称的结果:

julia> a[:,:,1]
2x2 Array{Int32,2}:
1 3
2 4

对比:

julia> a[:,1,:]
2x1x2 Array{Int32,3}:
[:, :, 1] =
1
2

[:, :, 2] =
2
3

有人能解释一下这是怎么回事吗?我来自 numpy/MATLAB 背景,这种行为对我来说非常奇怪。

最佳答案

如果您有 Matlab 背景,这应该不足为奇,因为 Matlab 的工作方式相同:

>> a = reshape(1:8, 2, 2, 2)

a(:,:,1) =

1 3
2 4


a(:,:,2) =

5 7
6 8

>> b = a(:,:,1)

b =

1 3
2 4

>> ndims(b)

ans =

2

>> c = a(:,1,:)

c(:,:,1) =

1
2


c(:,:,2) =

5
6

>> ndims(c)

ans =

3

在 Julia 和 Matlab 中,索引时添加额外的 1 不是错误;即使 b 是一个二维对象,您仍然可以编写 b[2,2,1]

最后,如果您想要更像 numpy 的东西,请考虑(在 Julia 中)使用 slice:

julia> c = slice(a, :, 1, :)
2x2 SubArray{Int64,2,Array{Int64,3},(Range1{Int64},Int64,Range1{Int64})}:
1 5
2 6

julia> c = slice(a, :, 1:1, :)
2x1x2 SubArray{Int64,3,Array{Int64,3},(Range1{Int64},Range1{Int64},Range1{Int64})}:
[:, :, 1] =
1
2

[:, :, 2] =
5
6

您将得到一个 SubArray 返回(数组 View ),它具有一些略有不同的属性,但从长远来看,大多数索引操作可能会返回它。或者,如果您更喜欢数组,您可以对 a[:,1,:] 的返回值调用 squeezereshape 以获得你想要的结果。

关于julia - 切片不对称的多维 Julia 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21152877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com