Julia是否等同于NumPy的省略号切片语法(...)?

时间:2015-05-11 04:43:45

标签: numpy multidimensional-array slice julia

在NumPy中,ellipsis syntax用于

  

填写多个:,直到切片说明符的数量与数组的维度匹配。

(释义this answer)。

我怎么能在朱莉娅那样做?

2 个答案:

答案 0 :(得分:5)

尚未,但如果你愿意,你可以帮助自己。

    import Base.getindex, Base.setindex!
    const .. = Val{:...}

    setindex!{T}(A::AbstractArray{T,1}, x, ::Type{Val{:...}}, n) = A[n] = x
    setindex!{T}(A::AbstractArray{T,2}, x, ::Type{Val{:...}}, n) = A[ :, n] = x
    setindex!{T}(A::AbstractArray{T,3}, x, ::Type{Val{:...}}, n) = A[ :, :, n] =x

    getindex{T}(A::AbstractArray{T,1}, ::Type{Val{:...}}, n) = A[n]
    getindex{T}(A::AbstractArray{T,2}, ::Type{Val{:...}}, n) = A[ :, n]
    getindex{T}(A::AbstractArray{T,3}, ::Type{Val{:...}}, n) = A[ :, :, n]

然后你可以写

    > rand(3,3,3)[.., 1]
    3x3 Array{Float64,2}:
     0.0750793  0.490528  0.273044
     0.470398   0.461376  0.01372 
     0.311559   0.879684  0.531157

如果您想要更精细的切片,则需要生成/扩展定义或使用分阶段功能。

修改:现在,请参阅https://github.com/ChrisRackauckas/EllipsisNotation.jl

答案 1 :(得分:1)

他们要走的路是EllipsisNotation.jl,它将..添加到语言中。

示例:

julia> using EllipsisNotation

julia> x = rand(1,2,3,4,5);

julia> x[..,3] == x[:,:,:,:,3]
true

julia> x[1,..] == x[1,:,:,:,:]
true

julia> x[1,1,..] == x[1,1,:,:,:]
true

(@ mschauer已经注意到了他的答案(编辑),但参考仅是最后,我觉得这个问题值得一个最新的答案。)