API
ComponentArrays.Axis
— Typeax = Axis(nt::NamedTuple)
Gives named component access for ComponentArray
s.
Examples
julia> using ComponentArrays
+
+julia> ax = Axis((a = 1, b = ViewAxis(2:7, PartitionedAxis(2, (a = 1, b = 2))), c = ViewAxis(8:10, (a = 1, b = 2:3))));
+
+julia> A = [100, 4, 1.3, 1, 1, 4.4, 0.4, 2, 1, 45];
+
+julia> ca = ComponentArray(A, ax)
+ComponentVector{Float64}(a = 100.0, b = ComponentVector{Float64, SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, Tuple{Axis{(a = 1, b = 2)}}}[(a = 4.0, b = 1.3), (a = 1.0, b = 1.0), (a = 4.4, b = 0.4)], c = (a = 2.0, b = [1.0, 45.0]))
+
+julia> ca.a
+100.0
+
+julia> ca.b
+3-element LazyArray{ComponentVector{Float64, SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, Tuple{Axis{(a = 1, b = 2)}}}}:
+ ComponentVector{Float64,SubArray...}(a = 4.0, b = 1.3)
+ ComponentVector{Float64,SubArray...}(a = 1.0, b = 1.0)
+ ComponentVector{Float64,SubArray...}(a = 4.4, b = 0.4)
+
+julia> ca.c
+ComponentVector{Float64,SubArray...}(a = 2.0, b = [1.0, 45.0])
+
+julia> ca.c.b
+2-element view(::Vector{Float64}, 9:10) with eltype Float64:
+ 1.0
+ 45.0
ComponentArrays.ComponentArray
— Typex = ComponentArray(nt::NamedTuple)
+x = ComponentArray(;kwargs...)
+x = ComponentArray(data::AbstractVector, ax)
+x = ComponentArray{T}(args...; kwargs...) where T
Array type that can be accessed like an arbitrary nested mutable struct.
Examples
julia> using ComponentArrays
+
+julia> x = ComponentArray(a=1, b=[2, 1, 4], c=(a=2, b=[1, 2]))
+ComponentVector{Int64}(a = 1, b = [2, 1, 4], c = (a = 2, b = [1, 2]))
+
+julia> x.c.a = 400; x
+ComponentVector{Int64}(a = 1, b = [2, 1, 4], c = (a = 400, b = [1, 2]))
+
+julia> x[5]
+400
+
+julia> collect(x)
+7-element Vector{Int64}:
+ 1
+ 2
+ 1
+ 4
+ 400
+ 1
+ 2
ComponentArrays.ComponentMatrix
— Typex = ComponentMatrix(data::AbstractMatrix, ax...)
+x = ComponentMatrix{T}(data::AbstractMatrix, ax...) where T
A ComponentMatrix
is an alias for a two-dimensional ComponentArray
.
ComponentArrays.ComponentVector
— Typex = ComponentVector(nt::NamedTuple)
+x = ComponentVector(;kwargs...)
+x = ComponentVector(data::AbstractVector, ax)
+x = ComponentVector{T}(args...; kwargs...) where T
A ComponentVector
is an alias for a one-dimensional ComponentArray
.
ComponentArrays.KeepIndex
— TypeKeepIndex(idx)
Tag an index of a ComponentArray
to retain it's Axis
through indexing
ComponentArrays.LazyArray
— TypeLazyArray(gen::Base.Generator)
Wrapper around Base.Generator that also indexes like an array. This is needed to make ComponentArrays that hold arrays of ComponentArrays
ComponentArrays.PartitionedAxis
— Typepa = PartitionedAxis(partition_size, index_map)
Axis for creating arrays of ComponentArray
s
ComponentArrays.ShapedAxis
— Typesa = ShapedAxis(shape)
Preserves higher-dimensional array components in ComponentArray
s (matrix components, for example)
ComponentArrays.ViewAxis
— Typeva = ViewAxis(parent_index, index_map)
Axis for creating arrays of ComponentArray
s
ComponentArrays.getaxes
— Methodgetaxes(x::ComponentArray)
Access .axes
field of a ComponentArray
. This is different than axes(x::ComponentArray)
, which returns the axes of the contained array.
Examples
julia> using ComponentArrays
+
+julia> ax = Axis(a=1:3, b=(4:6, (a=1, b=2:3)))
+Axis(a = 1:3, b = (4:6, (a = 1, b = 2:3)))
+
+julia> A = zeros(6,6);
+
+julia> ca = ComponentArray(A, (ax, ax))
+6×6 ComponentMatrix{Float64} with axes Axis(a = 1:3, b = (4:6, (a = 1, b = 2:3))) × Axis(a = 1:3, b = (4:6, (a = 1, b = 2:3)))
+ 0.0 0.0 0.0 0.0 0.0 0.0
+ 0.0 0.0 0.0 0.0 0.0 0.0
+ 0.0 0.0 0.0 0.0 0.0 0.0
+ 0.0 0.0 0.0 0.0 0.0 0.0
+ 0.0 0.0 0.0 0.0 0.0 0.0
+ 0.0 0.0 0.0 0.0 0.0 0.0
+
+julia> getaxes(ca)
+(Axis(a = 1:3, b = (4:6, (a = 1, b = 2:3))), Axis(a = 1:3, b = (4:6, (a = 1, b = 2:3))))
ComponentArrays.getdata
— Methodgetdata(x::ComponentArray)
Access .data
field of a ComponentArray
, which contains the array that ComponentArray
wraps.
ComponentArrays.label2index
— Methodlabel2index(x::ComponentVector, str::AbstractString)
+label2index(label_array, str::AbstractString)
Convert labels made by labels
function to an array of flat indices of a ComponentVector
.
Examples
julia> x = ComponentArray(a=5, b=[(a=(a=20,b=1), b=0), (a=(a=33,b=1), b=0)], c=(a=(a=2, b=[1,2]), b=[1. 2.; 5 6]))
+ComponentVector{Float64}(a = 5.0, b = ComponentVector{Float64, SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, Tuple{Axis{(a = ViewAxis(1:2, Axis(a = 1, b = 2)), b = 3)}}}[(a = (a = 20.0, b = 1.0), b = 0.0), (a = (a = 33.0, b = 1.0), b = 0.0)], c = (a = (a = 2.0, b = [1.0, 2.0]), b = [1.0 2.0; 5.0 6.0]))
+
+julia> ComponentArrays.labels(x)
+14-element Vector{String}:
+ "a"
+ "b[1].a.a"
+ "b[1].a.b"
+ "b[1].b"
+ "b[2].a.a"
+ "b[2].a.b"
+ "b[2].b"
+ "c.a.a"
+ "c.a.b[1]"
+ "c.a.b[2]"
+ "c.b[1,1]"
+ "c.b[2,1]"
+ "c.b[1,2]"
+ "c.b[2,2]"
+
+julia> ComponentArrays.label2index(x, "c.a")
+3-element Vector{Int64}:
+ 8
+ 9
+ 10
+
+julia> ComponentArrays.label2index(x, "b[1]")
+3-element Vector{Int64}:
+ 2
+ 3
+ 4
see also labels
ComponentArrays.labels
— Methodlabels(x::ComponentVector)
Get string labels for for each index of a ComponentVector
. Useful for automatic plot legend labelling.
Examples
julia> x = ComponentArray(a=5, b=[(a=(a=20,b=1), b=0), (a=(a=33,b=1), b=0)], c=(a=(a=2, b=[1,2]), b=[1. 2.; 5 6]))
+ComponentVector{Float64}(a = 5.0, b = ComponentVector{Float64, SubArray{Float64, 1, Vector{Float64}, Tuple{UnitRange{Int64}}, true}, Tuple{Axis{(a = ViewAxis(1:2, Axis(a = 1, b = 2)), b = 3)}}}[(a = (a = 20.0, b = 1.0), b = 0.0), (a = (a = 33.0, b = 1.0), b = 0.0)], c = (a = (a = 2.0, b = [1.0, 2.0]), b = [1.0 2.0; 5.0 6.0]))
+
+julia> ComponentArrays.labels(x)
+14-element Vector{String}:
+ "a"
+ "b[1].a.a"
+ "b[1].a.b"
+ "b[1].b"
+ "b[2].a.a"
+ "b[2].a.b"
+ "b[2].b"
+ "c.a.a"
+ "c.a.b[1]"
+ "c.a.b[2]"
+ "c.b[1,1]"
+ "c.b[2,1]"
+ "c.b[1,2]"
+ "c.b[2,2]"
see also label2index
ComponentArrays.valkeys
— Methodvalkeys(x::ComponentVector)
+valkeys(x::AbstractAxis)
Returns Val
-wrapped keys of ComponentVector
for fast iteration over component keys. Also works directly on an AbstractAxis
.
Examples
julia> using ComponentArrays
+
+julia> ca = ComponentArray(a=1, b=[1,2,3], c=(a=4,))
+ComponentVector{Int64}(a = 1, b = [1, 2, 3], c = (a = 4))
+
+julia> [ca[k] for k in valkeys(ca)]
+3-element Vector{Any}:
+ 1
+ [1, 2, 3]
+ ComponentVector{Int64}(a = 4)
+
+julia> sum(prod(ca[k]) for k in valkeys(ca))
+11