/// <summary>
        /// Use the <see cref="RowWise"/> operation directly and internally without any optimisation fallbacks.
        /// </summary>
        /// <param name="array">The array.</param>
        /// <param name="internalArray">The array as an internal array handle.</param>
        /// <param name="function">The function to apply row-wise.</param>
        /// <returns></returns>
        protected virtual INDArray _RowWiseDirect(INDArray array, TNDArray internalArray, Func <INDArray, INDArray> function)
        {
            INDArray[] rows = SliceRowWise(array, internalArray);

            for (int i = 0; i < rows.Length; i++)
            {
                rows[i] = function.Invoke(rows[i]);
            }

            DNDArray[] internalRowHandles = new DNDArray[rows.Length];
            for (int i = 0; i < rows.Length; i++)
            {
                internalRowHandles[i] = InternaliseArray(rows[i]).Handle;
            }

            return(CreateArrayFromHandle(new DNDArray(DNDArray.OfRows(internalRowHandles, DiffsharpBackendHandle))));
        }
        /// <inheritdoc />
        public INDArray StackRows(int numberRows, INDArray row)
        {
            TNDArray internalArray = InternaliseArray(row);

            return(CreateArrayFromHandle(DNDArray.OfRows(numberRows, internalArray.Handle, _diffsharpBackendHandle)));
        }