Skip to content

SciML/EllipsisNotation.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 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 .. afterward 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.