array shape
stride array
location of the first indexed value based on the stride array
subscripts followed by a mode
specifying how to handle subscripts which exceed array dimensions
linear index
var shape = [ 3, 3, 3 ];
var strides = [ 9, 3, 1 ];
var offset = 0;
var mode = [ 'throw' ]
var idx = sub2ind( shape, strides, offset, 1, 2, 2, mode );
// returns 17
Converts subscripts to a linear index.
Notes
The function accepts the following "modes":
throw
: throws an error when a subscript exceeds array dimensions.wrap
: wrap around subscripts exceeding array dimensions using modulo arithmetic.clamp
: set subscripts exceeding array dimensions to either0
(minimum index) or the maximum index along a particular dimension.When provided fewer modes than dimensions, the function recycles modes using modulo arithmetic.
When provided a stride array containing negative strides, if an
offset
is greater than0
, the function treats subscripts as mapping to a linear index in an underlying data buffer for the array, thus returning a linear index from the perspective of that buffer. If anoffset
is equal to0
, the function treats subscripts as mapping to a linear index in an array view, thus returning a linear index from the perspective of that view.var shape = [ 2, 2 ]; var strides = [ -2, 1 ]; var offset = 2; var mode = [ 'throw' ]; // From the perspective of a view... var idx = sub2ind( shape, strides, 0, 0, 0, mode ); // returns 0 idx = sub2ind( shape, strides, 0, 0, 1, mode ); // returns 1 idx = sub2ind( shape, strides, 0, 1, 0, mode ); // returns 2 idx = sub2ind( shape, strides, 0, 1, 1, mode ); // returns 3 // From the perspective of an underlying buffer... idx = sub2ind( shape, strides, offset, 0, 0, mode ); // returns 2 idx = sub2ind( shape, strides, offset, 0, 1, mode ); // returns 3 idx = sub2ind( shape, strides, offset, 1, 0, mode ); // returns 0 idx = sub2ind( shape, strides, offset, 1, 1, mode ); // returns 1
In short, from the perspective of a view, view data is always ordered.
must provide subscripts which do not exceed array dimensions