EllipsisNotation.jl

Julia-based implementation of ellipsis array indexing notation `..`
Popularity
80 Stars
Updated Last
1 Year Ago
Started In
May 2016

EllipsisNotation.jl

Join the chat at https://julialang.zulipchat.com #sciml-bridged Global Docs

codecov Build Status

ColPrac: Contributor's Guide on Collaborative Practices for Community Packages SciML Code Style

This implements the notation .. for indexing arrays. It's similar to the Python ... in that it means "all of the columns before (or after)".

Installation

Pkg.add("EllipsisNotation")
using EllipsisNotation

Example Usage

julia> A = Array{Int}(undef,2,4,2)

julia> A[..,1] = [2 1 4 5
                 2 2 3 6]

julia> A[..,2] = [3 2 6 5
                  3 2 6 6]

julia> A[:,:,1] == [2 1 4 5
                    2 2 3 6]
true

julia> A[1,..] = reshape([3 4
                          5 6
                          4 5
                          6 7],1,4,2) # drops singleton dimension

julia> B = [3 4
            5 6
            4 5
            6 7]

julia> B == reshape(A[1,..],4,2)
true

julia> A[..,1,2] # Can do as many integers as you want on the end!

For avoiding squeezing dimensions from slicing.

julia> C = ones(3,3,3,3,3);
julia> size(C[1:1, .., 1:1])
(1, 3, 3, 3, 1)

Note: .. slurps dimensions greedily, meaning that the first occurrence of .. in an index expression creates as many slices as possible. Other instances of .. afterwards are treated simply as slices. Usually, you should only use one instance of .. in an indexing expression to avoid possible confusion.

Warning: .. does not work when indexing also with end or begin. For example, A = randn(2,3,4); A[.., 1:end] will not give the intended result. This is a known limitation, and is not likely to be fixed until some necessary changes in the Julia language itself are implemented. See #19 for more details.

Acknowledgements

I would like to acknowledge M. Schauer for the .. notation implementation. He had the original idea, I just extended it and put it into a package because of how useful it has been to me.