nd4j-backends/nd4j-api-parent/nd4j-api/src/main/java/org/nd4j/linalg/api/ops/executioner/OpExecutionerUtil.java
public static Tensor1DStats get1DTensorStats(INDArray array, int... dimension) {
        long tensorLength = array.size(dimension[0]);

        //As per tensorssAlongDimension:
        long numTensors = array.tensorssAlongDimension(dimension);

        //First tensor always starts with the first element in the NDArray, regardless of dimension
        long firstTensorOffset = array.offset();

        //Next: Need to work out the separation between the start (first element) of each 1d tensor
        long tensorStartSeparation;
        int elementWiseStride; //Separation in buffer between elements in the tensor
        if (numTensors == 1) {
            tensorStartSeparation = -1; //Not applicable
            elementWiseStride = array.elementWiseStride();
        } else {
            INDArray secondTensor = array.tensorAlongDimension(1, dimension);
            tensorStartSeparation = secondTensor.offset() - firstTensorOffset;
            elementWiseStride = secondTensor.elementWiseStride();
        }

        return new Tensor1DStats(firstTensorOffset, tensorStartSeparation, numTensors, tensorLength, elementWiseStride);
    }
public static Tensor1DStats get1DTensorStats(INDArray array, int... dimension) {
        long tensorLength = array.size(dimension[0]);

        //As per tensorssAlongDimension:
        long numTensors = array.tensorssAlongDimension(dimension);

        //First tensor always starts with the first element in the NDArray, regardless of dimension
        long firstTensorOffset = array.offset();

        //Next: Need to work out the separation between the start (first element) of each 1d tensor
        long tensorStartSeparation;
        int elementWiseStride; //Separation in buffer between elements in the tensor
        if (numTensors == 1) {
            tensorStartSeparation = -1; //Not applicable
            elementWiseStride = array.elementWiseStride();
        } else {
            INDArray secondTensor = array.tensorAlongDimension(1, dimension);
            tensorStartSeparation = secondTensor.offset() - firstTensorOffset;
            elementWiseStride = secondTensor.elementWiseStride();
        }

        return new Tensor1DStats(firstTensorOffset, tensorStartSeparation, numTensors, tensorLength, elementWiseStride);
    }
public static Tensor1DStats get1DTensorStats ( INDArray array , int ... dimension ) { long tensorLength = array . size ( dimension [ 0 ] ) ; //As per tensorssAlongDimension: long numTensors = array . tensorssAlongDimension ( dimension ) ; //First tensor always starts with the first element in the NDArray, regardless of dimension long firstTensorOffset = array . offset ( ) ; //Next: Need to work out the separation between the start (first element) of each 1d tensor long tensorStartSeparation ; int elementWiseStride ; //Separation in buffer between elements in the tensor if ( numTensors == 1 ) { tensorStartSeparation = - 1 ; //Not applicable elementWiseStride = array . elementWiseStride ( ) ; } else { INDArray secondTensor = array . tensorAlongDimension ( 1 , dimension ) ; tensorStartSeparation = secondTensor . offset ( ) - firstTensorOffset ; elementWiseStride = secondTensor . elementWiseStride ( ) ; } return new Tensor1DStats ( firstTensorOffset , tensorStartSeparation , numTensors , tensorLength , elementWiseStride ) ; }
Tensor1DStats, used to efficiently iterate through tensors on a matrix (2d NDArray) for element-wise ops
For example, the offset of each 1d tensor can be calculated using only a single tensorAlongDimension method call,
hence is potentially faster than approaches requiring multiple tensorAlongDimension calls.<br>
Note that this can only (generally) be used for 2d NDArrays. For certain 3+d NDArrays, the tensor starts may not
be in increasing order
Tensor1DStats used to efficiently iterate through tensors on a matrix ( 2d NDArray ) for element - wise ops For example the offset of each 1d tensor can be calculated using only a single tensorAlongDimension method call hence is potentially faster than approaches requiring multiple tensorAlongDimension calls . <br > Note that this can only ( generally ) be used for 2d NDArrays . For certain 3 + d NDArrays the tensor starts may not be in increasing order