# Module `Owl_base_dense_ndarray_generic`

N-dimensional array module: including creation, manipulation, and various vectorised mathematical operations.

About the comparison of two complex numbers `x` and `y`, Owl uses the following conventions: 1) `x` and `y` are equal iff both real and imaginary parts are equal; 2) `x` is less than `y` if the magnitude of `x` is less than the magnitude of `x`; in case both `x` and `y` have the same magnitudes, `x` is less than `x` if the phase of `x` is less than the phase of `y`; 3) less or equal, greater, greater or equal relation can be further defined atop of the aforementioned conventions.

###### Type definition
```type ('a, 'b) t = ( 'a, 'b, Stdlib.Bigarray.c_layout ) Stdlib.Bigarray.Genarray.t```

Refer to :doc:`owl_dense_ndarray_generic`

`type ('a, 'b) kind = ( 'a, 'b ) Stdlib.Bigarray.kind`

Refer to :doc:`owl_dense_ndarray_generic`

###### Create Ndarrays
`val empty : ( 'a, 'b ) kind -> int array -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val create : ( 'a, 'b ) kind -> int array -> 'a -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val init : ( 'a, 'b ) kind -> int array -> ( int -> 'a ) -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

```val init_nd : ( 'a, 'b ) kind -> int array -> ( int array -> 'a ) -> ( 'a, 'b ) t```

Refer to :doc:`owl_dense_ndarray_generic`

`val zeros : ( 'a, 'b ) kind -> int array -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val ones : ( 'a, 'b ) kind -> int array -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val eye : ( 'a, 'b ) kind -> int -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val uniform : ( 'a, 'b ) kind -> ?a:'a -> ?b:'a -> int array -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

```val gaussian : ( 'a, 'b ) kind -> ?mu:'a -> ?sigma:'a -> int array -> ( 'a, 'b ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val sequential : ( 'a, 'b ) kind -> ?a:'a -> ?step:'a -> int array -> ( 'a, 'b ) t```

Refer to :doc:`owl_dense_ndarray_generic`

`val bernoulli : ( 'a, 'b ) kind -> ?p:float -> int array -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

###### Obtain basic properties
`val shape : ( 'a, 'b ) t -> int array`

Refer to :doc:`owl_dense_ndarray_generic`

`val num_dims : ( 'a, 'b ) t -> int`

Refer to :doc:`owl_dense_ndarray_generic`

`val nth_dim : ( 'a, 'b ) t -> int -> int`

Refer to :doc:`owl_dense_ndarray_generic`

`val numel : ( 'a, 'b ) t -> int`

Refer to :doc:`owl_dense_ndarray_generic`

`val kind : ( 'a, 'b ) t -> ( 'a, 'b ) kind`

Refer to :doc:`owl_dense_ndarray_generic`

`val strides : ( 'a, 'b ) t -> int array`

Refer to :doc:`owl_dense_ndarray_generic`

`val slice_size : ( 'a, 'b ) t -> int array`

Refer to :doc:`owl_dense_ndarray_generic`

###### Manipulate Ndarrays
`val get : ( 'a, 'b ) t -> int array -> 'a`

Refer to :doc:`owl_dense_ndarray_generic`

`val set : ( 'a, 'b ) t -> int array -> 'a -> unit`

Refer to :doc:`owl_dense_ndarray_generic`

`val get_slice : int list list -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val set_slice : int list list -> ( 'a, 'b ) t -> ( 'a, 'b ) t -> unit`

Refer to :doc:`owl_dense_ndarray_generic`

`val get_fancy : Owl_types.index list -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val set_fancy : Owl_types.index list -> ( 'a, 'b ) t -> ( 'a, 'b ) t -> unit`

Refer to :doc:`owl_dense_ndarray_generic`

`val reset : ( 'a, 'b ) t -> unit`

Refer to :doc:`owl_dense_ndarray_generic`

`val fill : ( 'a, 'b ) t -> 'a -> unit`

Refer to :doc:`owl_dense_ndarray_generic`

`val copy : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val copy_ : out:( 'a, 'b ) t -> ( 'a, 'b ) t -> unit`

Refer to :doc:`owl_dense_ndarray_generic`

`val reshape : ( 'a, 'b ) t -> int array -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val flatten : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val reverse : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val transpose : ?axis:int array -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val tile : ( 'a, 'b ) t -> int array -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val repeat : ( 'a, 'b ) t -> int array -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val pad : ?v:'a -> int list list -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val concatenate : ?axis:int -> ( 'a, 'b ) t array -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val stack : ?axis:int -> ( 'a, 'b ) t array -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val squeeze : ?axis:int array -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val expand : ?hi:bool -> ( 'a, 'b ) t -> int -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val split : ?axis:int -> int array -> ( 'a, 'b ) t -> ( 'a, 'b ) t array`

Refer to :doc:`owl_dense_ndarray_generic`

`val draw : ?axis:int -> ( 'a, 'b ) t -> int -> ( 'a, 'b ) t * int array`

Refer to :doc:`owl_dense_ndarray_generic`

`val one_hot : int -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

TODO: not implemented

###### Iterate array elements
`val iteri : ( int -> 'a -> unit ) -> ( 'a, 'b ) t -> unit`

Refer to :doc:`owl_dense_ndarray_generic`

`val iter : ( 'a -> unit ) -> ( 'a, 'b ) t -> unit`

Refer to :doc:`owl_dense_ndarray_generic`

`val mapi : ( int -> 'a -> 'a ) -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val map : ( 'a -> 'a ) -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val filteri : ( int -> 'a -> bool ) -> ( 'a, 'b ) t -> int array`

Refer to :doc:`owl_dense_ndarray_generic`

`val filter : ( 'a -> bool ) -> ( 'a, 'b ) t -> int array`

Refer to :doc:`owl_dense_ndarray_generic`

```val foldi : ?axis:int -> ( int -> 'a -> 'a -> 'a ) -> 'a -> ( 'a, 'b ) t -> ( 'a, 'b ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val fold : ?axis:int -> ( 'a -> 'a -> 'a ) -> 'a -> ( 'a, 'b ) t -> ( 'a, 'b ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val scani : ?axis:int -> ( int -> 'a -> 'a -> 'a ) -> ( 'a, 'b ) t -> ( 'a, 'b ) t```

Refer to :doc:`owl_dense_ndarray_generic`

`val scan : ?axis:int -> ( 'a -> 'a -> 'a ) -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

###### Examination & Comparison
`val exists : ( 'a -> bool ) -> ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val not_exists : ( 'a -> bool ) -> ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val for_all : ( 'a -> bool ) -> ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val is_zero : ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val is_positive : ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val is_negative : ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val is_nonpositive : ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val is_nonnegative : ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val is_normal : ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val not_nan : ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val not_inf : ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val equal : ( 'a, 'b ) t -> ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val not_equal : ( 'a, 'b ) t -> ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val greater : ( 'a, 'b ) t -> ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val less : ( 'a, 'b ) t -> ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val greater_equal : ( 'a, 'b ) t -> ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val less_equal : ( 'a, 'b ) t -> ( 'a, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val elt_equal : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val elt_not_equal : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val elt_less : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val elt_greater : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val elt_less_equal : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val elt_greater_equal : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val equal_scalar : ( 'a, 'b ) t -> 'a -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val not_equal_scalar : ( 'a, 'b ) t -> 'a -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val less_scalar : ( 'a, 'b ) t -> 'a -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val greater_scalar : ( 'a, 'b ) t -> 'a -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val less_equal_scalar : ( 'a, 'b ) t -> 'a -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val greater_equal_scalar : ( 'a, 'b ) t -> 'a -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val elt_equal_scalar : ( 'a, 'b ) t -> 'a -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val elt_not_equal_scalar : ( 'a, 'b ) t -> 'a -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val elt_less_scalar : ( 'a, 'b ) t -> 'a -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val elt_greater_scalar : ( 'a, 'b ) t -> 'a -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val elt_less_equal_scalar : ( 'a, 'b ) t -> 'a -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val elt_greater_equal_scalar : ( 'a, 'b ) t -> 'a -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val approx_equal : ?eps:float -> ( float, 'b ) t -> ( float, 'b ) t -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

`val approx_equal_scalar : ?eps:float -> ( float, 'b ) t -> float -> bool`

Refer to :doc:`owl_dense_ndarray_generic`

```val approx_elt_equal : ?eps:float -> ( float, 'b ) t -> ( float, 'b ) t -> ( float, 'b ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val approx_elt_equal_scalar : ?eps:float -> ( float, 'b ) t -> float -> ( float, 'b ) t```

Refer to :doc:`owl_dense_ndarray_generic`

###### Input/Output functions
`val of_array : ( 'a, 'b ) kind -> 'a array -> int array -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

```val print : ?max_row:int -> ?max_col:int -> ?header:bool -> ?fmt:( 'a -> string ) -> ( 'a, 'b ) t -> unit```

Refer to :doc:`owl_dense_ndarray_generic`

`val load : ( 'a, 'b ) kind -> string -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

###### Unary math operators
`val min : ?axis:int -> ?keep_dims:bool -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val max : ?axis:int -> ?keep_dims:bool -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val sum : ?axis:int -> ?keep_dims:bool -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val sum' : ( 'a, 'b ) t -> 'a`

Refer to :doc:`owl_dense_ndarray_generic`

`val log_sum_exp' : ( 'a, 'b ) t -> 'a`

Refer to :doc:`owl_dense_ndarray_generic`

`val log_sum_exp : ?axis:int -> ?keep_dims:bool -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val sum_reduce : ?axis:int array -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val min' : ( 'a, 'b ) t -> 'a`

Refer to :doc:`owl_dense_ndarray_generic`

`val max' : ( 'a, 'b ) t -> 'a`

Refer to :doc:`owl_dense_ndarray_generic`

`val abs : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val conj : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val neg : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val reci : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val signum : ( float, 'a ) t -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val sqr : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val sqrt : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val cbrt : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val exp : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val exp2 : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val exp10 : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val expm1 : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val log : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val log2 : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val log10 : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val log1p : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val sin : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val cos : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val tan : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val asin : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val acos : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val atan : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val sinh : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val cosh : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val tanh : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val asinh : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val acosh : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val atanh : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val floor : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val ceil : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val round : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val trunc : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val fix : ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val erf : ( float, 'b ) t -> ( float, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val erfc : ( float, 'b ) t -> ( float, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val relu : ( float, 'a ) t -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val dawsn : ( float, 'a ) t -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val softsign : ( float, 'a ) t -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val softplus : ( float, 'a ) t -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val sigmoid : ( float, 'a ) t -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val softmax : ?axis:int -> ( float, 'a ) t -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val l1norm' : ( float, 'b ) t -> float`

Refer to :doc:`owl_dense_ndarray_generic`

`val l2norm' : ( float, 'b ) t -> float`

Refer to :doc:`owl_dense_ndarray_generic`

`val l2norm_sqr' : ( float, 'b ) t -> float`

Refer to :doc:`owl_dense_ndarray_generic`

###### Binary math operators
`val add : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val sub : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val mul : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val div : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val add_scalar : ( 'a, 'b ) t -> 'a -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val sub_scalar : ( 'a, 'b ) t -> 'a -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val mul_scalar : ( 'a, 'b ) t -> 'a -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val div_scalar : ( 'a, 'b ) t -> 'a -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val scalar_add : 'a -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val scalar_sub : 'a -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val scalar_mul : 'a -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val scalar_div : 'a -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val pow : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val scalar_pow : 'a -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val pow_scalar : ( 'a, 'b ) t -> 'a -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val atan2 : ( float, 'a ) t -> ( float, 'a ) t -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val scalar_atan2 : float -> ( float, 'a ) t -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val atan2_scalar : ( float, 'a ) t -> float -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val min2 : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val max2 : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val fmod : ( float, 'a ) t -> ( float, 'a ) t -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val fmod_scalar : ( float, 'a ) t -> float -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val scalar_fmod : float -> ( float, 'a ) t -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

```val clip_by_value : ?amin:float -> ?amax:float -> ( float, 'b ) t -> ( float, 'b ) t```

Refer to :doc:`owl_dense_ndarray_generic`

`val clip_by_l2norm : float -> ( float, 'a ) t -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

`val fma : ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

```val conv1d : ?padding:Owl_types.padding -> ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val conv2d : ?padding:Owl_types.padding -> ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val conv3d : ?padding:Owl_types.padding -> ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val dilated_conv1d : ?padding:Owl_types.padding -> ( float, 'a ) t -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val dilated_conv2d : ?padding:Owl_types.padding -> ( float, 'a ) t -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val dilated_conv3d : ?padding:Owl_types.padding -> ( float, 'a ) t -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val transpose_conv1d : ?padding:Owl_types.padding -> ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val transpose_conv2d : ?padding:Owl_types.padding -> ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val transpose_conv3d : ?padding:Owl_types.padding -> ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val max_pool1d : ?padding:Owl_types.padding -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val max_pool2d : ?padding:Owl_types.padding -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val max_pool3d : ?padding:Owl_types.padding -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val avg_pool1d : ?padding:Owl_types.padding -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val avg_pool2d : ?padding:Owl_types.padding -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val avg_pool3d : ?padding:Owl_types.padding -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

`val upsampling2d : ( float, 'a ) t -> int array -> ( float, 'a ) t`

Refer to :doc:`owl_dense_ndarray_generic`

```val conv1d_backward_input : ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val conv1d_backward_kernel : ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val conv2d_backward_input : ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val conv2d_backward_kernel : ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val conv3d_backward_input : ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val conv3d_backward_kernel : ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val dilated_conv1d_backward_input : ( float, 'a ) t -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val dilated_conv1d_backward_kernel : ( float, 'a ) t -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val dilated_conv2d_backward_input : ( float, 'a ) t -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val dilated_conv2d_backward_kernel : ( float, 'a ) t -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val dilated_conv3d_backward_input : ( float, 'a ) t -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val dilated_conv3d_backward_kernel : ( float, 'a ) t -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val transpose_conv1d_backward_input : ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val transpose_conv1d_backward_kernel : ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val transpose_conv2d_backward_input : ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val transpose_conv2d_backward_kernel : ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val transpose_conv3d_backward_input : ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val transpose_conv3d_backward_kernel : ( float, 'a ) t -> ( float, 'a ) t -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val max_pool1d_backward : Owl_types.padding -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val max_pool2d_backward : Owl_types.padding -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val max_pool3d_backward : Owl_types.padding -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val avg_pool1d_backward : Owl_types.padding -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val avg_pool2d_backward : Owl_types.padding -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val avg_pool3d_backward : Owl_types.padding -> ( float, 'a ) t -> int array -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

```val upsampling2d_backward : ( float, 'a ) t -> int array -> ( float, 'a ) t -> ( float, 'a ) t```

Refer to :doc:`owl_dense_ndarray_generic`

###### Helper functions
`val sum_slices : ?axis:int -> ( float, 'b ) t -> ( float, 'b ) t`

Refer to :doc:`owl_dense_ndarray_generic`

###### Matrix functions
`val row_num : ( 'a, 'b ) t -> int`

Refer to :doc:`owl_dense_matrix_generic`

`val col_num : ( 'a, 'b ) t -> int`

Refer to :doc:`owl_dense_matrix_generic`

`val row : ( 'a, 'b ) t -> int -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_matrix_generic`

`val rows : ( 'a, 'b ) t -> int array -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_matrix_generic`

`val copy_row_to : ( 'a, 'b ) t -> ( 'a, 'b ) t -> int -> unit`

Refer to :doc:`owl_dense_matrix_generic`

`val copy_col_to : ( 'a, 'b ) t -> ( 'a, 'b ) t -> int -> unit`

Refer to :doc:`owl_dense_matrix_generic`

`val dot : ( float, 'b ) t -> ( float, 'b ) t -> ( float, 'b ) t`

Refer to :doc:`owl_dense_matrix_generic`

`val diag : ?k:int -> ( 'a, 'b ) t -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_matrix_generic`

`val trace : ( float, 'b ) t -> float`

Refer to :doc:`owl_dense_matrix_generic`

`val to_rows : ( 'a, 'b ) t -> ( 'a, 'b ) t array`

Refer to :doc:`owl_dense_matrix_generic`

`val of_rows : ( 'a, 'b ) t array -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_matrix_generic`

`val to_cols : ( 'a, 'b ) t -> ( 'a, 'b ) t array`

TODO

`val of_cols : ( 'a, 'b ) t array -> ( 'a, 'b ) t`

TODO

`val of_arrays : ( 'a, 'b ) kind -> 'a array array -> ( 'a, 'b ) t`

Refer to :doc:`owl_dense_matrix_generic`

```val draw_rows : ?replacement:bool -> ( 'a, 'b ) t -> int -> ( 'a, 'b ) t * int array```

Refer to :doc:`owl_dense_matrix_generic`

```val draw_rows2 : ?replacement:bool -> ( 'a, 'b ) t -> ( 'a, 'b ) t -> int -> ( 'a, 'b ) t * ( 'a, 'b ) t * int array```

Refer to :doc:`owl_dense_matrix_generic`

###### Helper functions
`val float_to_elt : 'a -> 'a`

Identity function to deal with the type conversion required by other functors.

`val elt_to_float : 'a -> 'a`

Identity function to deal with the type conversion required by other functors.