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 .* d
using 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 zero Array(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