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