forEach

Invoke a callback function once for each ndarray element.

Usage

var forEach = require( '@stdlib/ndarray/base/for-each' );

forEach( arrays, fcn[, thisArg] )

Invokes a callback function once for each ndarray element.

var Float64Array = require( '@stdlib/array/float64' );
var naryFunction = require( '@stdlib/utils/nary-function' );
var log = require( '@stdlib/console/log' );

// Create data buffers:
var xbuf = new Float64Array( 12 );

// Define the shape of the array:
var shape = [ 3, 1, 2 ];

// Define the array strides:
var sx = [ 4, 4, 1 ];

// Define the index offset:
var ox = 1;

// Create an ndarray-like object:
var x = {
    'dtype': 'float64',
    'data': xbuf,
    'shape': shape,
    'strides': sx,
    'offset': ox,
    'order': 'row-major'
};

// Apply the callback function:
forEach( [ x ], naryFunction( log, 1 ) );

The function accepts the following arguments:

  • arrays: array-like object containing an ndarray.
  • fcn: callback to apply.
  • thisArg: callback execution context.

The callback function is provided the following arguments:

  • value: current array element.
  • indices: current array element indices.
  • arr: the input ndarray.

Notes

  • The provided ndarray should be an object with the following properties:

    • dtype: data type.
    • data: data buffer.
    • shape: dimensions.
    • strides: stride lengths.
    • offset: index offset.
    • order: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).
  • For very high-dimensional ndarrays which are non-contiguous, one should consider copying the underlying data to contiguous memory before applying a callback function in order to achieve better performance.

Examples

var ndarray2array = require( '@stdlib/ndarray/base/to-array' );
var zeroTo = require( '@stdlib/array/base/zero-to' );
var naryFunction = require( '@stdlib/utils/nary-function' );
var log = require( '@stdlib/console/log' );
var forEach = require( '@stdlib/ndarray/base/for-each' );

var x = {
    'dtype': 'generic',
    'data': zeroTo( 10 ),
    'shape': [ 5, 2 ],
    'strides': [ -2, 1 ],
    'offset': 8,
    'order': 'row-major'
};

log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) );
forEach( [ x ], naryFunction( log, 2 ) );

x = {
    'dtype': 'generic',
    'data': zeroTo( 10 ),
    'shape': [ 5, 2 ],
    'strides': [ 1, -5 ],
    'offset': 5,
    'order': 'column-major'
};

log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) );
forEach( [ x ], naryFunction( log, 2 ) );

x = {
    'dtype': 'generic',
    'data': zeroTo( 18 ),
    'shape': [ 2, 3, 3 ],
    'strides': [ 9, 3, 1 ],
    'offset': 0,
    'order': 'row-major'
};

log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) );
forEach( [ x ], naryFunction( log, 2 ) );

x = {
    'dtype': 'generic',
    'data': zeroTo( 18 ),
    'shape': [ 2, 3, 3 ],
    'strides': [ -1, -2, -6 ],
    'offset': 17,
    'order': 'column-major'
};

log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) );
forEach( [ x ], naryFunction( log, 2 ) );
Did you find this page helpful?