RecursiveArrayTools.jl is a set of tools for dealing with recursive arrays like arrays of arrays.
For information on using the package, see the stable documentation. Use the in-development documentation for the version of the documentation, which contains the unreleased features.
using RecursiveArrayTools
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
b = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
vA =VectorOfArray(a)
vB =VectorOfArray(b)
vA .* vB # Now all standard array stuff works!# you can also create it directly with a vector-like syntax:
c = VA[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
d = VA[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
c .* dusing RecursiveArrayTools
# VectorOfArray with ragged data uses zero-padded rectangular interpretation
ragged =VectorOfArray([[1, 2], [3, 4, 5]])
size(ragged) # (3, 2) — max inner length is 3
ragged[3, 1] # 0 — implicit zeroArray(ragged) # [1 3; 2 4; 0 5]# For true ragged structure without zero-padding:using RecursiveArrayToolsRaggedArrays
A =RaggedVectorOfArray([[1, 2, 3], [4, 5, 6, 7], [8, 9]])
A[end, 1] # 3 — last of first array (length 3)
A[end, 2] # 7 — last of second array (length 4)
A[end, 3] # 9 — last of third array (length 2)a = (rand(5), rand(5))
b = (rand(5), rand(5))
pA =ArrayPartition(a)
pB =ArrayPartition(b)
pA .* pB # Now all standard array stuff works!# or using the vector syntax:
x0 =rand(3, 3)
v0 =rand(3, 3)
a0 =rand(3, 3)
u0 = AP[x0, v0, a0]
u0.x[1] === x0 # true
u0 .+=1
u0.x[2] === v0 # still true# do some calculations creating a new partitioned array
unew = u0 *10# easily access the individual components without having to rely on complicated indexing
xnew, vnew, anew = unew.x