# shape2strides
> Generate a stride array from an array shape.
## Usage
```javascript
var shape2strides = require( '@stdlib/ndarray/base/shape2strides' );
```
#### shape2strides( shape, order )
Generates a stride array from an array shape.
```javascript
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).
```javascript
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.
```javascript
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
```javascript
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
```c
#include "stdlib/ndarray/base/shape2strides.h"
```
#### stdlib_ndarray_shape2strides( ndims, \*shape, order, \*out )
Generates a stride array from an array shape.
```c
#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.
```c
int8_t stdlib_ndarray_shape2strides( int64_t ndims, int64_t *shape, enum STDLIB_NDARRAY_ORDER order, int64_t *out );
```
### Examples
```c
#include "stdlib/ndarray/base/shape2strides.h"
#include "stdlib/ndarray/orders.h"
#include
#include
int main() {
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" );
}
```