# Non-Singleton Dimensions
> Return the number of non-singleton dimensions.
## Usage
```javascript
var nonsingletonDimensions = require( '@stdlib/ndarray/base/nonsingleton-dimensions' );
```
#### nonsingletonDimensions( shape )
Returns number of non-singleton dimensions.
```javascript
var n = nonsingletonDimensions( [ 3, 1, 3 ] );
// returns 2
```
## Notes
- A singleton dimension is a dimension whose size is equal to `1`.
## Examples
```javascript
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
var nonsingletonDimensions = require( '@stdlib/ndarray/base/nonsingleton-dimensions' );
var shape;
var n;
var i;
shape = [ 0, 0, 0 ];
for ( i = 0; i < 100; i++ ) {
shape[ 0 ] = discreteUniform( 1, 5 );
shape[ 1 ] = discreteUniform( 1, 5 );
shape[ 2 ] = discreteUniform( 1, 5 );
n = nonsingletonDimensions( shape );
console.log( 'shape: %s. non-singleton dimensions: %d.', shape.join( 'x' ), n );
}
```
* * *
## C APIs
### Usage
```c
#include "stdlib/ndarray/base/nonsingleton_dimensions.h"
```
#### stdlib_ndarray_nonsingleton_dimensions( ndims, \*shape )
Returns the number of non-singleton dimensions.
```c
int64_t ndims = 2;
int64_t shape[] = { 10, 1 };
int64_t n = stdlib_ndarray_nonsingleton_dimensions( ndims, shape );
// returns 1
```
The function accepts the following arguments:
- **ndims**: `[in] int64_t` number of dimensions.
- **shape**: `[in] int64_t*` array shape.
```c
int64_t stdlib_ndarray_nonsingleton_dimensions( int64_t ndims, int64_t *shape );
```
### Examples
```c
#include "stdlib/ndarray/base/nonsingleton_dimensions.h"
#include
#include
int main() {
int64_t shape[] = { 10, 3, 1, 1, 5 };
int64_t n = stdlib_ndarray_nonsingleton_dimensions( 5, shape );
printf( "shape: %"PRId64"x%"PRId64"x%"PRId64"x%"PRId64"x%"PRId64". non-singleton dimensions: %"PRId64"\n", shape[ 0 ], shape[ 1 ], shape[ 2 ], shape[ 3 ], shape[ 4 ], n );
}
```