An ndpointer instance is used to describe an ndarray in restypes
and argtypes specifications. This approach is more flexible than
using, for example, POINTER(c_double), since several restrictions
can be specified, which are verified upon calling the ctypes function.
These include data type, number of dimensions, shape and flags. If a
given array does not satisfy the specified restrictions,
a TypeError is raised.

Parameters :

dtype : data-type, optional

Array data-type.

ndim : int, optional

Number of array dimensions.

shape : tuple of ints, optional

Array shape.

flags : str or tuple of str

Array flags; may be one or more of:

C_CONTIGUOUS / C / CONTIGUOUS

F_CONTIGUOUS / F / FORTRAN

OWNDATA / O

WRITEABLE / W

ALIGNED / A

UPDATEIFCOPY / U

Returns :

klass : ndpointer type object

A type object, which is an _ndtpr instance containing
dtype, ndim, shape and flags information.