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" );
}
Did you find this page helpful?