put
Replace specified elements of an array with provided values.
Usage
var put = require( '@stdlib/array/put' );
put( x, indices, values[, options] )
Replaces specified elements of an array with provided values.
var x = [ 1, 2, 3, 4 ];
var out = put( x, [ 1, 3 ], [ 20, 40 ] );
// returns [ 1, 20, 3, 40 ]
var bool = ( out === x );
// returns true
The function supports the following parameters:
- x: input array.
- indices: list of indices.
- values: values to set. When
indices
contains one or more elements,values
must be broadcast compatible withindices
(i.e., must have either one element or the same number of elements asindices
). - options: function options.
The function supports the following options:
- mode: index mode. Default:
'normalize'
.
If indices
is an empty array, the function returns the input array unchanged.
var x = [ 1, 2, 3, 4 ];
var out = put( x, [], [ 20, 40 ] );
// returns [ 1, 2, 3, 4 ]
The function supports broadcasting a values
array containing a single element against an indices
array containing one or more elements.
var x = [ 1, 2, 3, 4 ];
var out = put( x, [ 1, 3 ], [ 20 ] );
// returns [ 1, 20, 3, 20 ]
By default, the function normalizes negative integer indices to positive integer index equivalents.
var x = [ 1, 2, 3, 4 ];
var out = put( x, [ -3, -1 ], [ 20, 40 ] );
// returns [ 1, 20, 3, 40 ]
To specify an alternative index mode, provide a mode
option.
var x = [ 1, 2, 3, 4 ];
var out = put( x, [ -10, 10 ], [ 20, 40 ], {
'mode': 'clamp'
});
// returns [ 20, 2, 3, 40 ]
Notes
- The function mutates the input array
x
. - Because each index is only validated at the time of replacing a particular element, mutation may occur even when one or more indices are out-of-bounds, including when the index mode indicates to raise an exception.
- The
values
array must have a data type which can be safely cast to the input array data type. Floating-point data types (both real and complex) are allowed to downcast to a lower precision data type of the same kind (e.g., element values from a'float64'
values array can be assigned to corresponding elements in a'float32'
input array).
Examples
var filledBy = require( '@stdlib/array/base/filled-by' );
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
var linspace = require( '@stdlib/array/base/linspace' );
var put = require( '@stdlib/array/put' );
// Generate a linearly spaced array:
var x = linspace( 0, 100, 11 );
console.log( x );
// Generate an array of random indices:
var N = discreteUniform( 5, 15 );
var indices = filledBy( N, discreteUniform.factory( 0, x.length-1 ) );
console.log( indices );
// Generate an array of random values:
var values = filledBy( N, discreteUniform.factory( 1000, 2000 ) );
console.log( values );
// Update a random sample of elements in `x`:
var out = put( x, indices, values );
console.log( out );