shape2strides
Generate a stride array from an array shape.
Usage
var shape2strides = require( '@stdlib/ndarray/base/shape2strides' );
shape2strides( shape, order )
Generates a stride array from an array shape.
var strides = shape2strides( [ 3, 2 ], 'row-major' );
// returns [ 2, 1 ]
The order
parameter specifies whether an array is row-major
(C-style) or column-major
(Fortran-style).
var strides = shape2strides( [ 3, 2 ], 'column-major' );
// returns [ 1, 3 ]
shape2strides.assign( shape, order, out )
Generates a stride array from an array shape and assigns results to a provided output array.
var shape = [ 3, 2 ];
var strides = [ 0, 0 ];
var out = shape2strides.assign( shape, 'row-major', strides );
// returns [ 2, 1 ]
var bool = ( strides === out );
// returns true
Examples
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
var shape2strides = require( '@stdlib/ndarray/base/shape2strides' );
var strides;
var shape;
var i;
shape = [ 0, 0, 0 ];
for ( i = 0; i < 100; i++ ) {
shape[ 0 ] = discreteUniform( 1, 10 );
shape[ 1 ] = discreteUniform( 1, 10 );
shape[ 2 ] = discreteUniform( 1, 10 );
strides = shape2strides( shape, 'row-major' );
console.log( 'shape: %s. strides: %s.', shape.join( 'x' ), strides.join( ', ' ) );
}
C APIs
Usage
#include "stdlib/ndarray/base/shape2strides.h"
stdlib_ndarray_shape2strides( ndims, *shape, order, *out )
Generates a stride array from an array shape.
#include "stdlib/ndarray/orders.h"
int64_t ndims = 3;
int64_t shape[] = { 2, 3, 10 };
int64_t out[ 3 ];
stdlib_ndarray_shape2strides( ndims, shape, STDLIB_NDARRAY_ROW_MAJOR, out );
The function accepts the following arguments:
- ndims:
[in] int64_t
number of dimensions. - shape:
[in] int64_t*
array shape (dimensions). - order:
[in] enum STDLIB_NDARRAY_ORDER
specifies whether an array is row-major (C-style) or column-major (Fortran-style). - out:
[out] int64_t*
output strides array.
int8_t stdlib_ndarray_shape2strides( int64_t ndims, int64_t *shape, enum STDLIB_NDARRAY_ORDER order, int64_t *out );
Examples
#include "stdlib/ndarray/base/shape2strides.h"
#include "stdlib/ndarray/orders.h"
#include <stdio.h>
#include <inttypes.h>
int main( void ) {
int64_t shape[] = { 2, 3, 10 };
int64_t ndims = 3;
int64_t out[ 3 ];
stdlib_ndarray_shape2strides( ndims, shape, STDLIB_NDARRAY_ROW_MAJOR, out );
int i;
printf( "strides = { " );
for ( i = 0; i < ndims; i++ ) {
printf( "%"PRId64"", out[ i ] );
if ( i < ndims-1 ) {
printf( ", " );
}
}
printf( " }\n" );
}