@stdlib/strided
Version:
Strided.
161 lines (118 loc) • 5.73 kB
Plain Text
{{alias}}( fcns, types, data, nargs, nin, nout )
Returns a strided array function interface which accepts a callback function
and performs multiple dispatch.
Without offsets, a strided array function interface has the following
signature:
f( N, dx, x, sx, dy, y, sy, ..., clbk[, thisArg] )
where
- N: number of indexed elements.
- dx: data type for `x`.
- x: strided array.
- sx: index increment for `x`.
- dy: data type for `y`.
- y: strided array.
- sy: index increment for `y`.
- ...: additional strided arrays, data types, and associated strides.
- clbk: callback function.
- thisArg: callback function execution context.
The number of parameters is derived from `nargs`, the number of input
strided arrays is derived from `nin`, and the number of output strided
arrays is derived from `nout`.
Without offsets, the number of parameters must obey the following relation:
nargs = 3*(nout+nin) + 2
With offsets, the number of parameters must obey the following relation:
nargs = 4*(nout+nin) + 2
With offsets, a strided array function interface has the following
signature:
f( N, dx, x, sx, ox, dy, y, sy, oy, ..., clbk[, thisArg] )
where
- N: number of indexed elements.
- dx: data type for `x`.
- x: strided array.
- sx: index increment for `x`.
- ox: starting index for `x`.
- dy: data type for `y`.
- y: strided array.
- sy: index increment for `y`.
- oy: starting index for `y`.
- ...: additional strided arrays and associated data types, strides, and
offsets.
- clbk: callback function.
- thisArg: callback function execution context.
The choice of which strided array function interface to return depends on
the use case. The former is suitable for typed array views; while the latter
affords alternative indexing semantics more suitable for n-dimensional
arrays (ndarrays).
Parameters
----------
fcns: Function|ArrayLikeObject<Function>
List of strided array functions. Without offsets, a strided array
function should have the following signature:
f( arrays, shape, strides, data, clbk, thisArg )
where
- arrays: array containing strided input and output arrays.
- shape: array containing a single element, the number of indexed
elements.
- strides: array containing the stride lengths for the strided input and
output arrays.
- data: strided array function data (e.g., a callback).
- clbk: callback function.
- thisArg: callback function execution context.
With offsets, a strided array function should have the following
signature:
f( arrays, shape, strides, offsets, data, clbk, thisArg )
where
- offsets: array containing the starting indices (i.e., index offsets)
for the strided input and output arrays.
For convenience, a single strided array function may be provided which
will be invoked whenever the strided array argument data types match a
sequence of types in `types`. Providing a single strided array function
is particularly convenient for the case where, regardless of array data
types, traversing arrays remains the same, but the strided array
function `data` differs (e.g., callbacks which differ based on the array
data types).
types: ArrayLikeObject
One-dimensional list of strided array argument data types.
data: ArrayLikeObject|null
Strided array function data (e.g., callbacks). If `null`, a returned
strided array function interface does **not** provide a `data` argument
to an invoked strided array function.
nargs: integer
Total number of strided array function interface arguments (including
data types, strides, offsets, and the callback function).
nin: integer
Number of input strided arrays.
nout: integer
Number of output strided arrays.
Returns
-------
fcn: Function
Strided array function interface.
Examples
--------
// Define strided array argument data types:
> var t = [ 'float64', 'float64', 'float32', 'float32' ];
// Define a list of strided array function data (callbacks):
> var d = [ {{alias:/math/base/special/abs}}, {{alias:/math/base/special/absf}} ];
// Create a strided array function interface for applying unary callbacks:
> var f = {{alias}}( {{alias:/strided/base/unary-by}}, t, d, 8, 1, 1 );
// Create an input strided array:
> var x = new {{alias:/array/float64}}( [ -1.0, -2.0, -3.0, -4.0 ] );
// Create an output strided array:
> var y = new {{alias:/array/float64}}( [ 0.0, 0.0, 0.0, 0.0 ] );
// Compute the element-wise absolute value:
> f( x.length, 'float64', x, 1, 'float64', y, 1, {{alias:/math/base/special/identity}} );
> y
<Float64Array>[ 1.0, 2.0, 3.0, 4.0 ]
// Create a strided array function interface supporting offsets:
> f = {{alias}}( {{alias:/strided/base/unary}}.ndarray, t, d, 10, 1, 1 );
// Create an input strided array:
> x = new {{alias:/array/float64}}( [ -1.0, -2.0, -3.0, -4.0 ] );
// Create an output strided array:
> y = new {{alias:/array/float64}}( [ 0.0, 0.0, 0.0, 0.0 ] );
// Compute the element-wise absolute value starting from the third element:
> f( 2, 'float64', x, 1, 2, 'float64', y, 1, 2, {{alias:/math/base/special/identity}} );
> y
<Float64Array>[ 0.0, 0.0, 3.0, 4.0 ]
See Also
--------