take3d

Take elements from a three-dimensional nested array.

Usage

var take3d = require( '@stdlib/array/base/take3d' );

take3d( x, indices, dimension, mode )

Takes elements along a specified dimension from a three-dimensional nested array according to a specified index mode.

var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ];
var indices = [ 1, 1, 0, 0, -1, -1 ];

var y = take3d( x, indices, 2, 'normalize' );
// returns [ [ [ 2, 2, 1, 1, 2, 2 ], [ 4, 4, 3, 3, 4, 4 ] ] ]

The function accepts the following arguments:

  • x: input nested array.
  • indices: list of indices.
  • dimension: dimension along which to take elements. If provided a negative integer, the dimension is resolved relative to the last dimension, with the last dimension being -1.
  • mode: index mode specifying how to handle an index which is out-of-bounds.

If indices is an empty array, the function returns empty arrays along the specified dimension.

var x = [ [ [ 1, 2 ], [ 3, 4 ] ] ];

var y = take3d( x, [], 0, 'throw' );
// returns []

var z = take3d( x, [], 1, 'throw' );
// returns [ [] ]

var w = take3d( x, [], 2, 'throw' );
// returns [ [ [], [] ] ]

Notes

  • The function does not deep copy nested array elements.

Examples

var filled3dBy = require( '@stdlib/array/base/filled3d-by' );
var filledBy = require( '@stdlib/array/base/filled-by' );
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
var take3d = require( '@stdlib/array/base/take3d' );

// Generate a random array:
var shape = [ 3, 3, 3 ];
var x = filled3dBy( shape, discreteUniform.factory( 0, 100 ) );
console.log( x );

// Generate an array of random indices:
var N = discreteUniform( 1, 5 );
var indices = filledBy( N, discreteUniform.factory( 0, shape[2]-1 ) );
console.log( indices );

// Take a random sample of elements from `x`:
var y = take3d( x, indices, 2, 'throw' );
console.log( y );
Did you find this page helpful?