Skip to content

Latest commit

 

History

History
87 lines (64 loc) · 3.08 KB

File metadata and controls

87 lines (64 loc) · 3.08 KB

RecursiveArrayTools.jl

Join the chat at https://julialang.zulipchat.com #sciml-bridged Global Docs

codecov Build Status build status

ColPrac: Contributor's Guide on Collaborative Practices for Community Packages SciML Code Style

RecursiveArrayTools.jl is a set of tools for dealing with recursive arrays like arrays of arrays.

Tutorials and Documentation

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.

Example

VectorOfArray

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

Ragged Arrays

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)

ArrayPartition

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