3.6 KiB
3.6 KiB
isContiguous
Determine if an array is contiguous.
An array is contiguous if the memory address of each array element is adjacent to the memory address of the next array element.
Usage
var isContiguous = require( '@stdlib/ndarray/base/assert/is-contiguous' );
isContiguous( shape, strides, offset )
Returns a boolean
indicating if an array is contiguous.
var shape = [ 2, 2 ];
var strides = [ 2, 1 ];
var offset = 25;
var bool = isContiguous( shape, strides, offset );
// returns true
shape = [ 10 ];
strides = [ 3 ]; // every third memory element
offset = 0;
bool = isContiguous( shape, strides, offset );
// returns false
Examples
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
var shape2strides = require( '@stdlib/ndarray/base/shape2strides' );
var strides2offset = require( '@stdlib/ndarray/base/strides2offset' );
var randu = require( '@stdlib/random/base/randu' );
var isContiguous = require( '@stdlib/ndarray/base/assert/is-contiguous' );
var strides;
var offset;
var shape;
var bool;
var i;
var j;
shape = [ 0, 0, 0 ];
for ( i = 0; i < 100; i++ ) {
// Generate a random array shape:
shape[ 0 ] = discreteUniform( 1, 10 );
shape[ 1 ] = discreteUniform( 1, 10 );
shape[ 2 ] = discreteUniform( 1, 10 );
// Generate strides:
if ( randu() < 0.5 ) {
strides = shape2strides( shape, 'row-major' );
} else {
strides = shape2strides( shape, 'column-major' );
}
j = discreteUniform( 0, shape.length-1 );
strides[ j ] *= ( randu() < 0.5 ) ? -1 : 1;
strides[ 0 ] *= discreteUniform( 1, 2 ); // if scaled by 1, then single segment
// Compute the index offset:
offset = strides2offset( shape, strides ) + 25; // include a view offset
// Determine if the array is contiguous:
bool = isContiguous( shape, strides, offset );
console.log( 'Shape: %s. Strides: %s. Offset: %d. Contiguous: %s.', shape.join( 'x' ), strides.join( ',' ), offset, bool );
}