rray_split() splits x into equal pieces, splitting along the axes.

rray_split(x, axes = NULL)

## Arguments

x A vector, matrix, array, or rray. An integer vector. The axes to split on. The default splits along all axes.

## Value

A list of sub arrays of type x.

## Details

rray_split() works by splitting along the axes. The result is a list of sub arrays, where the axes of each sub array have been reduced to length 1. This is consistent with how reducers like rray_sum() work. As an example, splitting a (2, 3, 5) array along axes = c(2, 3) would result in a list of 15 (from 3 * 5) sub arrays, each with shape (2, 1, 1).

## Examples


x <- matrix(1:8, ncol = 2)

# Split the rows
# (4, 2) -> (1, 2)
rray_split(x, 1)#> [[1]]
#>      [,1] [,2]
#> [1,]    1    5
#>
#> [[2]]
#>      [,1] [,2]
#> [1,]    2    6
#>
#> [[3]]
#>      [,1] [,2]
#> [1,]    3    7
#>
#> [[4]]
#>      [,1] [,2]
#> [1,]    4    8
#>
# Split the columns
# (4, 2) -> (4, 1)
rray_split(x, 2)#> [[1]]
#>      [,1]
#> [1,]    1
#> [2,]    2
#> [3,]    3
#> [4,]    4
#>
#> [[2]]
#>      [,1]
#> [1,]    5
#> [2,]    6
#> [3,]    7
#> [4,]    8
#>
# Split along multiple dimensions
# (4, 2) -> (1, 1)
rray_split(x, c(1, 2))#> [[1]]
#>      [,1]
#> [1,]    1
#>
#> [[2]]
#>      [,1]
#> [1,]    2
#>
#> [[3]]
#>      [,1]
#> [1,]    3
#>
#> [[4]]
#>      [,1]
#> [1,]    4
#>
#> [[5]]
#>      [,1]
#> [1,]    5
#>
#> [[6]]
#>      [,1]
#> [1,]    6
#>
#> [[7]]
#>      [,1]
#> [1,]    7
#>
#> [[8]]
#>      [,1]
#> [1,]    8
#>
# The above split is the default behavior
rray_split(x)#> [[1]]
#>      [,1]
#> [1,]    1
#>
#> [[2]]
#>      [,1]
#> [1,]    2
#>
#> [[3]]
#>      [,1]
#> [1,]    3
#>
#> [[4]]
#>      [,1]
#> [1,]    4
#>
#> [[5]]
#>      [,1]
#> [1,]    5
#>
#> [[6]]
#>      [,1]
#> [1,]    6
#>
#> [[7]]
#>      [,1]
#> [1,]    7
#>
#> [[8]]
#>      [,1]
#> [1,]    8
#>
# You can technically split with a size 0 axes
# argument, which essentially requests no axes
# to be split and is the same as list(x)
rray_split(x, axes = integer(0))#> [[1]]
#>      [,1] [,2]
#> [1,]    1    5
#> [2,]    2    6
#> [3,]    3    7
#> [4,]    4    8
#>
# ---------------------------------------------------------------------------
# 4 dimensional example

x_4d <- rray(
x = 1:16,
dim = c(2, 2, 2, 2),
dim_names = list(
c("r1", "r2"),
c("c1", "c2"),
c("d1", "d2"),
c("e1", "e2")
)
)

# Split along the 1st dimension (rows)
# (2, 2, 2, 2) -> (1, 2, 2, 2)
rray_split(x_4d, 1)#> [[1]]
#> <rray<int>[,2,2,2][1]>
#> , , d1, e1
#>
#>    c1 c2
#> r1  1  3
#>
#> , , d2, e1
#>
#>    c1 c2
#> r1  5  7
#>
#> , , d1, e2
#>
#>    c1 c2
#> r1  9 11
#>
#> , , d2, e2
#>
#>    c1 c2
#> r1 13 15
#>
#>
#> [[2]]
#> <rray<int>[,2,2,2][1]>
#> , , d1, e1
#>
#>    c1 c2
#> r2  2  4
#>
#> , , d2, e1
#>
#>    c1 c2
#> r2  6  8
#>
#> , , d1, e2
#>
#>    c1 c2
#> r2 10 12
#>
#> , , d2, e2
#>
#>    c1 c2
#> r2 14 16
#>
#>
# Split along columns
# (2, 2, 2, 2) -> (2, 1, 2, 2)
rray_split(x_4d, 2)#> [[1]]
#> <rray<int>[,1,2,2][2]>
#> , , d1, e1
#>
#>    c1
#> r1  1
#> r2  2
#>
#> , , d2, e1
#>
#>    c1
#> r1  5
#> r2  6
#>
#> , , d1, e2
#>
#>    c1
#> r1  9
#> r2 10
#>
#> , , d2, e2
#>
#>    c1
#> r1 13
#> r2 14
#>
#>
#> [[2]]
#> <rray<int>[,1,2,2][2]>
#> , , d1, e1
#>
#>    c2
#> r1  3
#> r2  4
#>
#> , , d2, e1
#>
#>    c2
#> r1  7
#> r2  8
#>
#> , , d1, e2
#>
#>    c2
#> r1 11
#> r2 12
#>
#> , , d2, e2
#>
#>    c2
#> r1 15
#> r2 16
#>
#>
# Probably the most useful thing you might do
# is use this to split the 4D array into a set
# of 4 2D matrices.
rray_split(x_4d, c(3, 4))#> [[1]]
#> <rray<int>[,2,1,1][2]>
#> , , d1, e1
#>
#>    c1 c2
#> r1  1  3
#> r2  2  4
#>
#>
#> [[2]]
#> <rray<int>[,2,1,1][2]>
#> , , d2, e1
#>
#>    c1 c2
#> r1  5  7
#> r2  6  8
#>
#>
#> [[3]]
#> <rray<int>[,2,1,1][2]>
#> , , d1, e2
#>
#>    c1 c2
#> r1  9 11
#> r2 10 12
#>
#>
#> [[4]]
#> <rray<int>[,2,1,1][2]>
#> , , d2, e2
#>
#>    c1 c2
#> r1 13 15
#> r2 14 16
#>
#>