LayeredArrays
Introduction
LayeredArrays provides layer-wise array computation written in the Julia programming language. The layers have hierarchical structure, and lower layers can be accessed by using getindex
in AbstractLayeredArray
. All types except subtypes of AbstractLayeredArray
are on bottom layer 0
. The layer-wise operations are simply available by using broadcast operations
. This framework is useful for following index notation.
julia> xᵢ = @layered 3 [1,2,3]
3-element LayeredVector{3, Int64, Vector{Int64}}:
1
2
3
julia> yⱼ = @layered 2 [4,5,6]
3-element LayeredVector{2, Int64, Vector{Int64}}:
4
5
6
julia> zₖ = @layered 1 [7,8,9]
3-element LayeredVector{1, Int64, Vector{Int64}}:
7
8
9
julia> Aᵢⱼₖ = @. xᵢ * yⱼ + zₖ * yⱼ; # layerof(Aᵢⱼₖ) == 3
julia> Aᵢⱼₖ[1] == @. xᵢ[1] * yⱼ + zₖ * yⱼ # layerof(Aᵢⱼₖ[1]) == 2
true
julia> Aᵢⱼₖ[1][2] == @. xᵢ[1] * yⱼ[2] + zₖ * yⱼ[2] # layerof(Aᵢⱼₖ[1][2]) == 1
true
julia> Aᵢⱼₖ[1][2][3] == xᵢ[1] * yⱼ[2] + zₖ[3] * yⱼ[2] # layerof(Aᵢⱼₖ[1][2][3]) == 0
true
Note that the layer-wise broadcasting operations are always lazily evaluated.
Installation
pkg> add LayeredArrays
Types and Functions
LayeredArrays.AbstractLayeredArray
— TypeAbstractLayeredArray{layer, T, N}
Supertype for N
-dimensional layered arrays with elements of type T
.
LayeredArrays.LayeredArray
— TypeLayeredArray(x)
LayeredArray{layer}(x)
Construct LayeredArray
on layer
(layer = 1
by default).
See also @layered
.
Examples
julia> x = LayeredArray([1,2,3])
3-element LayeredVector{1, Int64, Vector{Int64}}:
1
2
3
julia> y = LayeredArray{2}([4,5,6])
3-element LayeredVector{2, Int64, Vector{Int64}}:
4
5
6
julia> x .* y
3-element LazyLayeredVector{2, LazyLayeredVector{1, Int64, Base.Broadcast.Broadcasted{LayeredArrays.LayeredArrayStyle{1}, Nothing, typeof(*), Tuple{LayeredVector{1, Int64, Vector{Int64}}, Base.RefValue{Int64}}}}, Base.Broadcast.Broadcasted{LayeredArrays.LayeredArrayStyle{1}, Nothing, typeof(*), Tuple{Base.RefValue{LayeredVector{1, Int64, Vector{Int64}}}, LayeredVector{2, Int64, Vector{Int64}}}}}:
[4, 8, 12]
[5, 10, 15]
[6, 12, 18]
LayeredArrays.@layered
— Macro@layered expr
@layered layer expr
Construct LayeredArray
on layer
(layere = 1
by default). This is equivalent to LayeredArray{layer}(expr)
.
See also LayeredArray
.
Examples
julia> x = @layered [1,2,3]
3-element LayeredVector{1, Int64, Vector{Int64}}:
1
2
3
julia> y = @layered 2 [4,5,6]
3-element LayeredVector{2, Int64, Vector{Int64}}:
4
5
6
julia> x .* y
3-element LazyLayeredVector{2, LazyLayeredVector{1, Int64, Base.Broadcast.Broadcasted{LayeredArrays.LayeredArrayStyle{1}, Nothing, typeof(*), Tuple{LayeredVector{1, Int64, Vector{Int64}}, Base.RefValue{Int64}}}}, Base.Broadcast.Broadcasted{LayeredArrays.LayeredArrayStyle{1}, Nothing, typeof(*), Tuple{Base.RefValue{LayeredVector{1, Int64, Vector{Int64}}}, LayeredVector{2, Int64, Vector{Int64}}}}}:
[4, 8, 12]
[5, 10, 15]
[6, 12, 18]