sliceAssign
Assign element values from a broadcasted input
ndarray
to corresponding elements in an outputndarray
view.
Usage
var sliceAssign = require( '@stdlib/ndarray/base/slice-assign' );
sliceAssign( x, y, slice, strict )
Assigns element values from a broadcasted input ndarray
to corresponding elements in an output ndarray
view.
var Slice = require( '@stdlib/slice/ctor' );
var MultiSlice = require( '@stdlib/slice/multi' );
var ndarray = require( '@stdlib/ndarray/ctor' );
var ndzeros = require( '@stdlib/ndarray/zeros' );
var ndarray2array = require( '@stdlib/ndarray/to-array' );
// Define an input array:
var buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ];
var shape = [ 3, 2 ];
var strides = [ 2, 1 ];
var offset = 0;
var x = ndarray( 'generic', buffer, shape, strides, offset, 'row-major' );
// returns <ndarray>
var sh = x.shape;
// returns [ 3, 2 ]
var arr = ndarray2array( x );
// returns [ [ 1.0, 2.0 ], [ 3.0, 4.0 ], [ 5.0, 6.0 ] ]
// Define an output array:
var y = ndzeros( [ 2, 3, 2 ], {
'dtype': x.dtype
});
// Create a slice:
var s0 = null;
var s1 = new Slice( null, null, -1 );
var s2 = new Slice( null, null, -1 );
var s = new MultiSlice( s0, s1, s2 );
// returns <MultiSlice>
// Perform assignment:
var out = sliceAssign( x, y, s, false );
// returns <ndarray>
var bool = ( out === y );
// returns true
arr = ndarray2array( y );
// returns [ [ [ 6.0, 5.0 ], [ 4.0, 3.0 ], [ 2.0, 1.0 ] ], [ [ 6.0, 5.0 ], [ 4.0, 3.0 ], [ 2.0, 1.0 ] ] ]
The function accepts the following arguments:
- x: input
ndarray
. - y: output
ndarray
. - slice: a
MultiSlice
instance specifying the outputndarray
view. - strict: boolean indicating whether to enforce strict bounds checking.
Notes
- The input
ndarray
must be broadcast compatible with the outputndarray
view. - The input
ndarray
must have a data type which can be safely cast to the outputndarray
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'
inputndarray
can be assigned to corresponding elements in a'float32'
outputndarray
).
Examples
var E = require( '@stdlib/slice/multi' );
var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
var ndarray2array = require( '@stdlib/ndarray/to-array' );
var ndzeros = require( '@stdlib/ndarray/zeros' );
var slice = require( '@stdlib/ndarray/base/slice' );
var sliceAssign = require( '@stdlib/ndarray/base/slice-assign' );
// Alias `null` to allow for more compact indexing expressions:
var _ = null;
// Create an output ndarray:
var y = ndzeros( [ 3, 3, 3 ] );
// Update each matrix...
var s1 = E( 0, _, _ );
sliceAssign( scalar2ndarray( 100 ), y, s1, false );
var a1 = ndarray2array( slice( y, s1, false ) );
// returns [ [ 100, 100, 100 ], [ 100, 100, 100 ], [ 100, 100, 100 ] ]
var s2 = E( 1, _, _ );
sliceAssign( scalar2ndarray( 200 ), y, s2, false );
var a2 = ndarray2array( slice( y, s2, false ) );
// returns [ [ 200, 200, 200 ], [ 200, 200, 200 ], [ 200, 200, 200 ] ]
var s3 = E( 2, _, _ );
sliceAssign( scalar2ndarray( 300 ), y, s3, false );
var a3 = ndarray2array( slice( y, s3, false ) );
// returns [ [ 300, 300, 300 ], [ 300, 300, 300 ], [ 300, 300, 300 ] ]
// Update the second rows in each matrix:
var s4 = E( _, 1, _ );
sliceAssign( scalar2ndarray( 400 ), y, s4, false );
var a4 = ndarray2array( slice( y, s4, false ) );
// returns [ [ 400, 400, 400 ], [ 400, 400, 400 ], [ 400, 400, 400 ] ]
// Update the second columns in each matrix:
var s5 = E( _, _, 1 );
sliceAssign( scalar2ndarray( 500 ), y, s5, false );
var a5 = ndarray2array( slice( y, s5, false ) );
// returns [ [ 500, 500, 500 ], [ 500, 500, 500 ], [ 500, 500, 500 ] ]
// Return the contents of the entire ndarray:
var a6 = ndarray2array( y );
/* returns
[
[
[ 100, 500, 100 ],
[ 400, 500, 400 ],
[ 100, 500, 100 ]
],
[
[ 200, 500, 200 ],
[ 400, 500, 400 ],
[ 200, 500, 200 ]
],
[
[ 300, 500, 300 ],
[ 400, 500, 400 ],
[ 300, 500, 300 ]
]
]
*/