/CenterIndexedArrays.jl

Arrays indexed symmetrically around zero

Primary LanguageJuliaOtherNOASSERTION

CenterIndexedArrays

Build Status

A CenterIndexedArray is an array indexed symmetrically around its midpoint. Here's a quick demo:

julia> A = CenterIndexedArray(reshape(1:15, 3, 5))
3×5 CenterIndexedArray(reshape(::UnitRange{Int64}, 3, 5)) with eltype Int64 with indices SymRange(1)×SymRange(2):
 1  4  7  10  13
 2  5  8  11  14
 3  6  9  12  15

julia> A[0, 0]   # the center point
8

julia> A[0, -1]
5

An example application is in image registration, to encode the mismatch between two images as you displace them relative to one another.

The axes, SymRange, are symmetric ranges. They too are indexed symmetrically around 0:

julia> r = CenterIndexedArrays.SymRange(3)
SymRange(3)

julia> length(r)
7

julia> r[7]
ERROR: BoundsError: attempt to access 7-element SymRange with indices SymRange(3) at index [7]
Stacktrace:
 [1] throw_boundserror(::SymRange, ::Int64) at ./abstractarray.jl:538
 [2] getindex(::SymRange, ::Int64) at /home/tim/.julia/dev/CenterIndexedArrays/src/symrange.jl:28
 [3] top-level scope at none:0

julia> r[-3]
-3

julia> r[3]
3