From babb4161f23bfb95bcc093ba869a7a640f6f8181 Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Thu, 5 Jan 2017 16:04:28 -0600 Subject: [PATCH] Add steps/offsets convenience constructor: AxisArray(A::AbstractArray, (names...,), (steps...,), [(offsets...,)]) --- src/core.jl | 5 +++++ test/core.jl | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/src/core.jl b/src/core.jl index e7efb77..1b190d9 100644 --- a/src/core.jl +++ b/src/core.jl @@ -94,6 +94,7 @@ immutable AxisArray{T,N,D,Ax} <: AbstractArray{T,N} AxisArray(A::AbstractArray, axes::Axis...) AxisArray(A::AbstractArray, names::Symbol...) AxisArray(A::AbstractArray, vectors::AbstractVector...) +AxisArray(A::AbstractArray, (names...,), (steps...,), [(offsets...,)]) ``` ### Arguments @@ -202,6 +203,10 @@ checknames() = () AxisArray(A::AbstractArray) = AxisArray(A, ()) # Disambiguation AxisArray(A::AbstractArray, names::Symbol...) = AxisArray(A, map((name,ind)->Axis{name}(ind), names, indices(A))) AxisArray(A::AbstractArray, vects::AbstractVector...) = AxisArray(A, ntuple(i->Axis{_defaultdimname(i)}(vects[i]), length(vects))) +function AxisArray{T,N}(A::AbstractArray{T,N}, names::NTuple{N,Symbol}, steps::NTuple{N,Number}, offsets::NTuple{N,Number}=map(zero, steps)) + axs = ntuple(i->Axis{names[i]}(range(offsets[i], steps[i], size(A,i))), N) + AxisArray(A, axs...) +end # Traits immutable HasAxes{B} end diff --git a/test/core.jl b/test/core.jl index 1b0d298..c608412 100644 --- a/test/core.jl +++ b/test/core.jl @@ -117,6 +117,13 @@ A = AxisArray([0]', :x, :y) @test axisnames(@inferred(squeeze(A, Axis{:x,UnitRange{Int}}))) == (:y,) @test axisnames(@inferred(squeeze(A, Axis{:y}))) == (:x,) @test axisnames(@inferred(squeeze(squeeze(A, Axis{:x}), Axis{:y}))) == () +# Names, steps, and offsets +B = AxisArray([1 4; 2 5; 3 6], (:x, :y), (0.2, 100)) +@test axisnames(B) == (:x, :y) +@test axisvalues(B) == (0:0.2:0.4, 0:100:100) +B = AxisArray([1 4; 2 5; 3 6], (:x, :y), (0.2, 100), (-3,14)) +@test axisnames(B) == (:x, :y) +@test axisvalues(B) == (-3:0.2:-2.6, 14:100:114) @test AxisArrays.HasAxes(A) == AxisArrays.HasAxes{true}() @test AxisArrays.HasAxes([1]) == AxisArrays.HasAxes{false}()