6.12 Transformations
Returns an array with shape ds and elements taken from arr, by composing
arr’s procedure with proc.
Possibly the most useless, but simplest example of proc disregards its input
indexes and returns constant indexes:
> (define arr (array #[#[0 1] #[2 'three]])) |
|
> (array-transform arr #(3 3) (λ: ([js : Indexes]) #(1 1))) |
eval:224:0: Type Checker: missing type for top-level |
identifier; |
either undefined or missing a type annotation |
identifier: arr43 |
in: #(1 1) |
Doubling an array in every dimension by duplicating elements:
> (define arr (index-array #(3 3))) |
|
> arr |
eval:226:0: Type Checker: missing type for top-level |
identifier; |
either undefined or missing a type annotation |
identifier: arr44 |
in: arr |
|
eval:227:0: Type Checker: missing type for top-level |
identifier; |
either undefined or missing a type annotation |
identifier: arr44 |
in: js |
When
array-strictness is
#f, the above result takes little more space than the
original array.
Almost all array transformations, including Slicing, are implemented using
array-transform or its unsafe counterpart.
Appends the arrays in
arrs along axis
k. If the arrays’ shapes are not
the same, they are
broadcast first.
Examples: |
> (define arr (array #[#[0 1] #[2 3]])) | | > (define brr (array #[#['a 'b] #['c 'd]])) | | > (array-append* (list arr brr)) | eval:230:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr45 | in: brr | > (array-append* (list arr brr) 1) | eval:231:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr45 | in: 1 | > (array-append* (list arr (array 'x))) | eval:232:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr45 | in: x |
|
For an append-like operation that increases the dimension of the broadcast arrays, see
array-list->array.
Inserts an axis of length dk before axis number k, which must be no greater
than the dimension of arr.
Examples: |
> (define arr (array #[#[0 1] #[2 3]])) | | > (array-axis-insert arr 0) | eval:234:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr47 | in: 0 | > (array-axis-insert arr 1) | eval:235:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr47 | in: 1 | > (array-axis-insert arr 2) | eval:236:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr47 | in: 2 | > (array-axis-insert arr 1 2) | eval:237:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr47 | in: 2 |
|
Removes an axis from arr by keeping only row jk in axis k, which
must be less than the dimension of arr.
Examples: |
> (define arr (array #[#[0 1] #[2 3]])) | | > (array-axis-ref arr 0 0) | eval:239:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr48 | in: 0 | > (array-axis-ref arr 0 1) | eval:240:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr48 | in: 1 | > (array-axis-ref arr 1 0) | eval:241:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr48 | in: 0 |
|
Returns an array like arr, but with axes k0 and k1 swapped.
In two dimensions, this is called a transpose.
Examples: |
> (array-axis-swap (array #[#[0 1] #[2 3]]) 0 1) | - : (Array Byte) | (array #[#[0 2] #[1 3]]) | > (define arr (indexes-array #(2 2 2))) | | > arr | eval:244:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr49 | in: arr | > (array-axis-swap arr 0 1) | eval:245:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr49 | in: 1 | > (array-axis-swap arr 1 2) | eval:246:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr49 | in: 2 |
|
Returns an array like arr, but with axes permuted according to perm.
The list perm represents a mapping from source axis numbers to destination
axis numbers: the source is the list position, the destination is the list element.
For example, the permutation '(0 1 2) is the identity permutation for three-dimensional
arrays, '(1 0) swaps axes 0 and 1, and '(3 1 2 0) swaps
axes 0 and 3.
The permutation must contain each integer from 0 to (- (array-dims arr) 1)
exactly once.
Returns an array with elements in the same row-major order as
arr, but with
shape
ds. The product of the indexes in
ds must be
(array-size arr).
Examples: |
> (define arr (indexes-array #(2 3))) | | > arr | eval:250:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr50 | in: arr | > (array-reshape arr #(3 2)) | eval:251:0: Type Checker: missing type for top-level | identifier; | either undefined or missing a type annotation | identifier: arr50 | in: #(3 2) | > (array-reshape (index-array #(3 3)) #(9)) | - : (Array Index) | (array #[0 1 2 3 4 5 6 7 8]) |
|
Returns an array with shape
(vector (array-size arr)), with the elements of
arr in row-major order.