如果你来自一个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
在这两个朱莉娅和Matlab,这不是增加额外1
■当一个错误你指数;即使b
是2d对象,仍可以编写b[2,2,1]
。
最后,如果你想要的东西,更像numpy的多,考虑(在朱丽亚)使用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
回(阵列视图),其中有一些稍微不同属性,但从长远来看,很可能会由大多数索引操作返回。或者,如果您更喜欢数组,您可以拨打squeeze
或reshape
以获得您想要的结果,返回值为a[:,1,:]
。
谢谢。我喜欢茱莉亚,但是以矩阵为中心的自然和令人困惑的阵列切片(与numpy相比)让我略微放弃了它。 –