Python NumPy学习总结

Posted wj-1314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python NumPy学习总结相关的知识,希望对你有一定的参考价值。

一、NumPy简介

  其官网是:http://www.numpy.org/

  NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy内部解除了Python的GIL(全局解释器锁),运行效率极好,是大量机器学习框架的基础库!

  关于GIL请参考博客:http://www.cnblogs.com/wj-1314/p/9056555.html

NumPy的全名为Numeric Python,是一个开源的Python科学计算库,它包括:

  • 一个强大的N维数组对象ndrray;
  • 比较成熟的(广播)函数库;
  • 用于整合C/C++和Fortran代码的工具包;
  • 实用的线性代数、傅里叶变换和随机数生成函数

1.1  NumPy的优点:

  • 对于同样的数值计算任务,使用NumPy要比直接编写Python代码便捷得多;
  • NumPy中的数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构,且其能够提升的性能是与数组中的元素成比例的;
  • NumPy的大部分代码都是用C语言写的,其底层算法在设计时就有着优异的性能,这使得NumPy比纯Python代码高效得多

         当然,NumPy也有其不足之处,由于NumPy使用内存映射文件以达到最优的数据读写性能,而内存的大小限制了其对TB级大文件的处理;此外,NumPy数组的通用性不及Python提供的list容器。因此,在科学计算之外的领域,NumPy的优势也就不那么明显。

 

二、数组ndarray

  NumPy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器,该对象由两部分组成:

  • 实际的数据;
  • 描述这些数据的元数据;

  Numpy中定义的最重要的对象是成为ndarray的N维数组类型。它描述相同类型的元素集合。可以使用基于零的索引访问集合中的项目。

  ndarray中的每个元素在内存中使用相同大小的块。ndarray中每个元素是数据类型对象的对象(称为dtype)

  大部分的数组操作仅仅是修改元数据部分,而不改变其底层的实际数据。数组的维数称为秩,简单来说就是如果你需要获取数组中一个特定元素所需的坐标数,如a是一个2×3×4的矩阵,你索引其中的一个元素必须给定三个坐标a[x,y,z],故它的维数就是3。而轴可以理解为一种对数组空间的分割,以数组a为例,如果我们以0为轴,那么a可以看成是一个由两个元素构成的数组,其中每个元素都是一个3×4的数组。

  我们可以直接将数组看作一种新的数据类型,就像list、tuple、dict一样,但数组中所有元素的类型必须是一致的,Python支持的数据类型有整型、浮点型以及复数型,但这些类型不足以满足科学计算的需求,因此NumPy中添加了许多其他的数据类型,如bool、inti、int64、float32、complex64等。同时,它也有许多其特有的属性和方法。

官方解释:

class ndarray(object):
    """
    ndarray(shape, dtype=float, buffer=None, offset=0,
                strides=None, order=None)
    
        An array object represents a multidimensional, homogeneous array
        of fixed-size items.  An associated data-type object describes the
        format of each element in the array (its byte-order, how many bytes it
        occupies in memory, whether it is an integer, a floating point number,
        or something else, etc.)
    
        Arrays should be constructed using `array`, `zeros` or `empty` (refer
        to the See Also section below).  The parameters given here refer to
        a low-level method (`ndarray(...)`) for instantiating an array.
    
        For more information, refer to the `numpy` module and examine the
        methods and attributes of an array.
    
        Parameters
        ----------
        (for the __new__ method; see Notes below)
    
        shape : tuple of ints
            Shape of created array.
        dtype : data-type, optional
            Any object that can be interpreted as a numpy data type.
        buffer : object exposing buffer interface, optional
            Used to fill the array with data.
        offset : int, optional
            Offset of array data in buffer.
        strides : tuple of ints, optional
            Strides of data in memory.
        order : {‘C‘, ‘F‘}, optional
            Row-major (C-style) or column-major (Fortran-style) order.
    
        Attributes
        ----------
        T : ndarray
            Transpose of the array.
        data : buffer
            The array‘s elements, in memory.
        dtype : dtype object
            Describes the format of the elements in the array.
        flags : dict
            Dictionary containing information related to memory use, e.g.,
            ‘C_CONTIGUOUS‘, ‘OWNDATA‘, ‘WRITEABLE‘, etc.
        flat : numpy.flatiter object
            Flattened version of the array as an iterator.  The iterator
            allows assignments, e.g., ``x.flat = 3`` (See `ndarray.flat` for
            assignment examples; TODO).
        imag : ndarray
            Imaginary part of the array.
        real : ndarray
            Real part of the array.
        size : int
            Number of elements in the array.
        itemsize : int
            The memory use of each array element in bytes.
        nbytes : int
            The total number of bytes required to store the array data,
            i.e., ``itemsize * size``.
        ndim : int
            The array‘s number of dimensions.
        shape : tuple of ints
            Shape of the array.
        strides : tuple of ints
            The step-size required to move from one element to the next in
            memory. For example, a contiguous ``(3, 4)`` array of type
            ``int16`` in C-order has strides ``(8, 2)``.  This implies that
            to move from element to element in memory requires jumps of 2 bytes.
            To move from row-to-row, one needs to jump 8 bytes at a time
            (``2 * 4``).
        ctypes : ctypes object
            Class containing properties of the array needed for interaction
            with ctypes.
        base : ndarray
            If the array is a view into another array, that array is its `base`
            (unless that array is also a view).  The `base` array is where the
            array data is actually stored.
    
        See Also
        --------
        array : Construct an array.
        zeros : Create an array, each element of which is zero.
        empty : Create an array, but leave its allocated memory unchanged (i.e.,
                it contains "garbage").
        dtype : Create a data-type.
    
        Notes
        -----
        There are two modes of creating an array using ``__new__``:
    
        1. If `buffer` is None, then only `shape`, `dtype`, and `order`
           are used.
        2. If `buffer` is an object exposing the buffer interface, then
           all keywords are interpreted.
    
        No ``__init__`` method is needed because the array is fully initialized
        after the ``__new__`` method.
    
        Examples
        --------
        These examples illustrate the low-level `ndarray` constructor.  Refer
        to the `See Also` section above for easier ways of constructing an
        ndarray.
    
        First mode, `buffer` is None:
    
        >>> np.ndarray(shape=(2,2), dtype=float, order=‘F‘)
        array([[ -1.13698227e+002,   4.25087011e-303],
               [  2.88528414e-306,   3.27025015e-309]])         #random
    
        Second mode:
    
        >>> np.ndarray((2,), buffer=np.array([1,2,3]),
        ...            offset=np.int_().itemsize,
        ...            dtype=int) # offset = 1*itemsize, i.e. skip first element
        array([2, 3])
    """
    def all(self, axis=None, out=None, keepdims=False): # real signature unknown; restored from __doc__
        """
        a.all(axis=None, out=None, keepdims=False)
        
            Returns True if all elements evaluate to True.
        
            Refer to `numpy.all` for full documentation.
        
            See Also
            --------
            numpy.all : equivalent function
        """
        pass

    def any(self, axis=None, out=None, keepdims=False): # real signature unknown; restored from __doc__
        """
        a.any(axis=None, out=None, keepdims=False)
        
            Returns True if any of the elements of `a` evaluate to True.
        
            Refer to `numpy.any` for full documentation.
        
            See Also
            --------
            numpy.any : equivalent function
        """
        pass

    def argmax(self, axis=None, out=None): # real signature unknown; restored from __doc__
        """
        a.argmax(axis=None, out=None)
        
            Return indices of the maximum values along the given axis.
        
            Refer to `numpy.argmax` for full documentation.
        
            See Also
            --------
            numpy.argmax : equivalent function
        """
        pass

    def argmin(self, axis=None, out=None): # real signature unknown; restored from __doc__
        """
        a.argmin(axis=None, out=None)
        
            Return indices of the minimum values along the given axis of `a`.
        
            Refer to `numpy.argmin` for detailed documentation.
        
            See Also
            --------
            numpy.argmin : equivalent function
        """
        pass

    def argpartition(self, kth, axis=-1, kind=‘introselect‘, order=None): # real signature unknown; restored from __doc__
        """
        a.argpartition(kth, axis=-1, kind=‘introselect‘, order=None)
        
            Returns the indices that would partition this array.
        
            Refer to `numpy.argpartition` for full documentation.
        
            .. versionadded:: 1.8.0
        
            See Also
            --------
            numpy.argpartition : equivalent function
        """
        pass

    def argsort(self, axis=-1, kind=‘quicksort‘, order=None): # real signature unknown; restored from __doc__
        """
        a.argsort(axis=-1, kind=‘quicksort‘, order=None)
        
            Returns the indices that would sort this array.
        
            Refer to `numpy.argsort` for full documentation.
        
            See Also
            --------
            numpy.argsort : equivalent function
        """
        pass

    def astype(self, dtype, order=‘K‘, casting=‘unsafe‘, subok=True, copy=True): # real signature unknown; restored from __doc__
        """
        a.astype(dtype, order=‘K‘, casting=‘unsafe‘, subok=True, copy=True)
        
            Copy of the array, cast to a specified type.
        
            Parameters
            ----------
            dtype : str or dtype
                Typecode or data-type to which the array is cast.
            order : {‘C‘, ‘F‘, ‘A‘, ‘K‘}, optional
                Controls the memory layout order of the result.
                ‘C‘ means C order, ‘F‘ means Fortran order, ‘A‘
                means ‘F‘ order if all the arrays are Fortran contiguous,
                ‘C‘ order otherwise, and ‘K‘ means as close to the
                order the array elements appear in memory as possible.
                Default is ‘K‘.
            casting : {‘no‘, ‘equiv‘, ‘safe‘, ‘same_kind‘, ‘unsafe‘}, optional
                Controls what kind of data casting may occur. Defaults to ‘unsafe‘
                for backwards compatibility.
        
                  * ‘no‘ means the data types should not be cast at all.
                  * ‘equiv‘ means only byte-order changes are allowed.
                  * ‘safe‘ means only casts which can preserve values are allowed.
                  * ‘same_kind‘ means only safe casts or casts within a kind,
                    like float64 to float32, are allowed.
                  * ‘unsafe‘ means any data conversions may be done.
            subok : bool, optional
                If True, then sub-classes will be passed-through (default), otherwise
                the returned array will be forced to be a base-class array.
            copy : bool, optional
                By default, astype always returns a newly allocated array. If this
                is set to false, and the `dtype`, `order`, and `subok`
                requirements are satisfied, the input array is returned instead
                of a copy.
        
            Returns
            -------
            arr_t : ndarray
                Unless `copy` is False and the other conditions for returning the input
                array are satisfied (see description for `copy` input parameter), `arr_t`
                is a new array of the same shape as the input array, with dtype, order
                given by `dtype`, `order`.
        
            Notes
            -----
            Starting in NumPy 1.9, astype method now returns an error if the string
            dtype to cast to is not long enough in ‘safe‘ casting mode to hold the max
            value of integer/float array that is being casted. Previously the casting
            was allowed even if the result was truncated.
        
            Raises
            ------
            ComplexWarning
                When casting from complex to float or int. To avoid this,
                one should use ``a.real.astype(t)``.
        
            Examples
            --------
            >>> x = np.array([1, 2, 2.5])
            >>> x
            array([ 1. ,  2. ,  2.5])
        
            >>> x.astype(int)
            array([1, 2, 2])
        """
        pass

    def byteswap(self, inplace=False): # real signature unknown; restored from __doc__
        """
        a.byteswap(inplace=False)
        
            Swap the bytes of the array elements
        
            Toggle between low-endian and big-endian data representation by
            returning a byteswapped array, optionally swapped in-place.
        
            Parameters
            ----------
            inplace : bool, optional
                If ``True``, swap bytes in-place, default is ``False``.
        
            Returns
            -------
            out : ndarray
                The byteswapped array. If `inplace` is ``True``, this is
                a view to self.
        
            Examples
            --------
            >>> A = np.array([1, 256, 8755], dtype=np.int16)
            >>> map(hex, A)
            [‘0x1‘, ‘0x100‘, ‘0x2233‘]
            >>> A.byteswap(inplace=True)
            array([  256,     1, 13090], dtype=int16)
            >>> map(hex, A)
            [‘0x100‘, ‘0x1‘, ‘0x3322‘]
        
            Arrays of strings are not swapped
        
            >>> A = np.array([‘ceg‘, ‘fac‘])
            >>> A.byteswap()
            array([‘ceg‘, ‘fac‘],
                  dtype=‘|S3‘)
        """
        pass

    def choose(self, choices, out=None, mode=‘raise‘): # real signature unknown; restored from __doc__
        """
        a.choose(choices, out=None, mode=‘raise‘)
        
            Use an index array to construct a new array from a set of choices.
        
            Refer to `numpy.choose` for full documentation.
        
            See Also
            --------
            numpy.choose : equivalent function
        """
        pass

    def clip(self, min=None, max=None, out=None): # real signature unknown; restored from __doc__
        """
        a.clip(min=None, max=None, out=None)
        
            Return an array whose values are limited to ``[min, max]``.
            One of max or min must be given.
        
            Refer to `numpy.clip` for full documentation.
        
            See Also
            --------
            numpy.clip : equivalent function
        """
        pass

    def compress(self, condition, axis=None, out=None): # real signature unknown; restored from __doc__
        """
        a.compress(condition, axis=None, out=None)
        
            Return selected slices of this array along given axis.
        
            Refer to `numpy.compress` for full documentation.
        
            See Also
            --------
            numpy.compress : equivalent function
        """
        pass

    def conj(self): # real signature unknown; restored from __doc__
        """
        a.conj()
        
            Complex-conjugate all elements.
        
            Refer to `numpy.conjugate` for full documentation.
        
            See Also
            --------
            numpy.conjugate : equivalent function
        """
        pass

    def conjugate(self): # real signature unknown; restored from __doc__
        """
        a.conjugate()
        
            Return the complex conjugate, element-wise.
        
            Refer to `numpy.conjugate` for full documentation.
        
            See Also
            --------
            numpy.conjugate : equivalent function
        """
        pass

    def copy(self, order=‘C‘): # real signature unknown; restored from __doc__
        """
        a.copy(order=‘C‘)
        
            Return a copy of the array.
        
            Parameters
            ----------
            order : {‘C‘, ‘F‘, ‘A‘, ‘K‘}, optional
                Controls the memory layout of the copy. ‘C‘ means C-order,
                ‘F‘ means F-order, ‘A‘ means ‘F‘ if `a` is Fortran contiguous,
                ‘C‘ otherwise. ‘K‘ means match the layout of `a` as closely
                as possible. (Note that this function and :func:`numpy.copy` are very
                similar, but have different default values for their order=
                arguments.)
        
            See also
            --------
            numpy.copy
            numpy.copyto
        
            Examples
            --------
            >>> x = np.array([[1,2,3],[4,5,6]], order=‘F‘)
        
            >>> y = x.copy()
        
            >>> x.fill(0)
        
            >>> x
            array([[0, 0, 0],
                   [0, 0, 0]])
        
            >>> y
            array([[1, 2, 3],
                   [4, 5, 6]])
        
            >>> y.flags[‘C_CONTIGUOUS‘]
            True
        """
        pass

    def cumprod(self, axis=None, dtype=None, out=None): # real signature unknown; restored from __doc__
        """
        a.cumprod(axis=None, dtype=None, out=None)
        
            Return the cumulative product of the elements along the given axis.
        
            Refer to `numpy.cumprod` for full documentation.
        
            See Also
            --------
            numpy.cumprod : equivalent function
        """
        pass

    def cumsum(self, axis=None, dtype=None, out=None): # real signature unknown; restored from __doc__
        """
        a.cumsum(axis=None, dtype=None, out=None)
        
            Return the cumulative sum of the elements along the given axis.
        
            Refer to `numpy.cumsum` for full documentation.
        
            See Also
            --------
            numpy.cumsum : equivalent function
        """
        pass

    def diagonal(self, offset=0, axis1=0, axis2=1): # real signature unknown; restored from __doc__
        """
        a.diagonal(offset=0, axis1=0, axis2=1)
        
            Return specified diagonals. In NumPy 1.9 the returned array is a
            read-only view instead of a copy as in previous NumPy versions.  In
            a future version the read-only restriction will be removed.
        
            Refer to :func:`numpy.diagonal` for full documentation.
        
            See Also
            --------
            numpy.diagonal : equivalent function
        """
        pass

    def dot(self, b, out=None): # real signature unknown; restored from __doc__
        """
        a.dot(b, out=None)
        
            Dot product of two arrays.
        
            Refer to `numpy.dot` for full documentation.
        
            See Also
            --------
            numpy.dot : equivalent function
        
            Examples
            --------
            >>> a = np.eye(2)
            >>> b = np.ones((2, 2)) * 2
            >>> a.dot(b)
            array([[ 2.,  2.],
                   [ 2.,  2.]])
        
            This array method can be conveniently chained:
        
            >>> a.dot(b).dot(b)
            array([[ 8.,  8.],
                   [ 8.,  8.]])
        """
        pass

    def dump(self, file): # real signature unknown; restored from __doc__
        """
        a.dump(file)
        
            Dump a pickle of the array to the specified file.
            The array can be read back with pickle.load or numpy.load.
        
            Parameters
            ----------
            file : str
                A string naming the dump file.
        """
        pass

    def dumps(self): # real signature unknown; restored from __doc__
        """
        a.dumps()
        
            Returns the pickle of the array as a string.
            pickle.loads or numpy.loads will convert the string back to an array.
        
            Parameters
            ----------
            None
        """
        pass

    def fill(self, value): # real signature unknown; restored from __doc__
        """
        a.fill(value)
        
            Fill the array with a scalar value.
        
            Parameters
            ----------
            value : scalar
                All elements of `a` will be assigned this value.
        
            Examples
            --------
            >>> a = np.array([1, 2])
            >>> a.fill(0)
            >>> a
            array([0, 0])
            >>> a = np.empty(2)
            >>> a.fill(1)
            >>> a
            array([ 1.,  1.])
        """
        pass

    def flatten(self, order=‘C‘): # real signature unknown; restored from __doc__
        """
        a.flatten(order=‘C‘)
        
            Return a copy of the array collapsed into one dimension.
        
            Parameters
            ----------
            order : {‘C‘, ‘F‘, ‘A‘, ‘K‘}, optional
                ‘C‘ means to flatten in row-major (C-style) order.
                ‘F‘ means to flatten in column-major (Fortran-
                style) order. ‘A‘ means to flatten in column-major
                order if `a` is Fortran *contiguous* in memory,
                row-major order otherwise. ‘K‘ means to flatten
                `a` in the order the elements occur in memory.
                The default is ‘C‘.
        
            Returns
            -------
            y : ndarray
                A copy of the input array, flattened to one dimension.
        
            See Also
            --------
            ravel : Return a flattened array.
            flat : A 1-D flat iterator over the array.
        
            Examples
            --------
            >>> a = np.array([[1,2], [3,4]])
            >>> a.flatten()
            array([1, 2, 3, 4])
            >>> a.flatten(‘F‘)
            array([1, 3, 2, 4])
        """
        pass

    def getfield(self, dtype, offset=0): # real signature unknown; restored from __doc__
        """
        a.getfield(dtype, offset=0)
        
            Returns a field of the given array as a certain type.
        
            A field is a view of the array data with a given data-type. The values in
            the view are determined by the given type and the offset into the current
            array in bytes. The offset needs to be such that the view dtype fits in the
            array dtype; for example an array of dtype complex128 has 16-byte elements.
            If taking a view with a 32-bit integer (4 bytes), the offset needs to be
            between 0 and 12 bytes.
        
            Parameters
            ----------
            dtype : str or dtype
                The data type of the view. The dtype size of the view can not be larger
                than that of the array itself.
            offset : int
                Number of bytes to skip before beginning the element view.
        
            Examples
            --------
            >>> x = np.diag([1.+1.j]*2)
            >>> x[1, 1] = 2 + 4.j
            >>> x
            array([[ 1.+1.j,  0.+0.j],
                   [ 0.+0.j,  2.+4.j]])
            >>> x.getfield(np.float64)
            array([[ 1.,  0.],
                   [ 0.,  2.]])
        
            By choosing an offset of 8 bytes we can select the complex part of the
            array for our view:
        
            >>> x.getfield(np.float64, offset=8)
            array([[ 1.,  0.],
               [ 0.,  4.]])
        """
        pass

    def item(self, *args): # real signature unknown; restored from __doc__
        """
        a.item(*args)
        
            Copy an element of an array to a standard Python scalar and return it.
        
            Parameters
            ----------
            *args : Arguments (variable number and type)
        
                * none: in this case, the method only works for arrays
                  with one element (`a.size == 1`), which element is
                  copied into a standard Python scalar object and returned.
        
                * int_type: this argument is interpreted as a flat index into
                  the array, specifying which element to copy and return.
        
                * tuple of int_types: functions as does a single int_type argument,
                  except that the argument is interpreted as an nd-index into the
                  array.
        
            Returns
            -------
            z : Standard Python scalar object
                A copy of the specified element of the array as a suitable
                Python scalar
        
            Notes
            -----
            When the data type of `a` is longdouble or clongdouble, item() returns
            a scalar array object because there is no available Python scalar that
            would not lose information. Void arrays return a buffer object for item(),
            unless fields are defined, in which case a tuple is returned.
        
            `item` is very similar to a[args], except, instead of an array scalar,
            a standard Python scalar is returned. This can be useful for speeding up
            access to elements of the array and doing arithmetic on elements of the
            array using Python‘s optimized math.
        
            Examples
            --------
            >>> x = np.random.randint(9, size=(3, 3))
            >>> x
            array([[3, 1, 7],
                   [2, 8, 3],
                   [8, 5, 3]])
            >>> x.item(3)
            2
            >>> x.item(7)
            5
            >>> x.item((0, 1))
            1
            >>> x.item((2, 2))
            3
        """
        pass

    def itemset(self, *args): # real signature unknown; restored from __doc__
        """
        a.itemset(*args)
        
            Insert scalar into an array (scalar is cast to array‘s dtype, if possible)
        
            There must be at least 1 argument, and define the last argument
            as *item*.  Then, ``a.itemset(*args)`` is equivalent to but faster
            than ``a[args] = item``.  The item should be a scalar value and `args`
            must select a single item in the array `a`.
        
            Parameters
            ----------
            *args : Arguments
                If one argument: a scalar, only used in case `a` is of size 1.
                If two arguments: the last argument is the value to be set
                and must be a scalar, the first argument specifies a single array
                element location. It is either an int or a tuple.
        
            Notes
            -----
            Compared to indexing syntax, `itemset` provides some speed increase
            for placing a scalar into a particular location in an `ndarray`,
            if you must do this.  However, generally this is discouraged:
            among other problems, it complicates the appearance of the code.
            Also, when using `itemset` (and `item`) inside a loop, be sure
            to assign the methods to a local variable to avoid the attribute
            look-up at each loop iteration.
        
            Examples
            --------
            >>> x = np.random.randint(9, size=(3, 3))
            >>> x
            array([[3, 1, 7],
                   [2, 8, 3],
                   [8, 5, 3]])
            >>> x.itemset(4, 0)
            >>> x.itemset((2, 2), 9)
            >>> x
            array([[3, 1, 7],
                   [2, 0, 3],
                   [8, 5, 9]])
        """
        pass

    def max(self, axis=None, out=None, keepdims=False): # real signature unknown; restored from __doc__
        """
        a.max(axis=None, out=None, keepdims=False)
        
            Return the maximum along a given axis.
        
            Refer to `numpy.amax` for full documentation.
        
            See Also
            --------
            numpy.amax : equivalent function
        """
        pass

    def mean(self, axis=None, dtype=None, out=None, keepdims=False): # real signature unknown; restored from __doc__
        """
        a.mean(axis=None, dtype=None, out=None, keepdims=False)
        
            Returns the average of the array elements along given axis.
        
            Refer to `numpy.mean` for full documentation.
        
            See Also
            --------
            numpy.mean : equivalent function
        """
        pass

    def min(self, axis=None, out=None, keepdims=False): # real signature unknown; restored from __doc__
        """
        a.min(axis=None, out=None, keepdims=False)
        
            Return the minimum along a given axis.
        
            Refer to `numpy.amin` for full documentation.
        
            See Also
            --------
            numpy.amin : equivalent function
        """
        pass

    def newbyteorder(self, new_order=‘S‘): # real signature unknown; restored from __doc__
        """
        arr.newbyteorder(new_order=‘S‘)
        
            Return the array with the same data viewed with a different byte order.
        
            Equivalent to::
        
                arr.view(arr.dtype.newbytorder(new_order))
        
            Changes are also made in all fields and sub-arrays of the array data
            type.
        
        
        
            Parameters
            ----------
            new_order : string, optional
                Byte order to force; a value from the byte order specifications
                below. `new_order` codes can be any of:
        
                * ‘S‘ - swap dtype from current to opposite endian
                * {‘<‘, ‘L‘} - little endian
                * {‘>‘, ‘B‘} - big endian
                * {‘=‘, ‘N‘} - native order
                * {‘|‘, ‘I‘} - ignore (no change to byte order)
        
                The default value (‘S‘) results in swapping the current
                byte order. The code does a case-insensitive check on the first
                letter of `new_order` for the alternatives above.  For example,
                any of ‘B‘ or ‘b‘ or ‘biggish‘ are valid to specify big-endian.
        
        
            Returns
            -------
            new_arr : array
                New array object with the dtype reflecting given change to the
                byte order.
        """
        pass

    def nonzero(self): # real signature unknown; restored from __doc__
        """
        a.nonzero()
        
            Return the indices of the elements that are non-zero.
        
            Refer to `numpy.nonzero` for full documentation.
        
            See Also
            --------
            numpy.nonzero : equivalent function
        """
        pass

    def partition(self, kth, axis=-1, kind=‘introselect‘, order=None): # real signature unknown; restored from __doc__
        """
        a.partition(kth, axis=-1, kind=‘introselect‘, order=None)
        
            Rearranges the elements in the array in such a way that the value of the
            element in kth position is in the position it would be in a sorted array.
            All elements smaller than the kth element are moved before this element and
            all equal or greater are moved behind it. The ordering of the elements in
            the two partitions is undefined.
        
            .. versionadded:: 1.8.0
        
            Parameters
            ----------
            kth : int or sequence of ints
                Element index to partition by. The kth element value will be in its
                final sorted position and all smaller elements will be moved before it
                and all equal or greater elements behind it.
                The order of all elements in the partitions is undefined.
                If provided with a sequence of kth it will partition all elements
                indexed by kth of them into their sorted position at once.
            axis : int, optional
                Axis along which to sort. Default is -1, which means sort along the
                last axis.
            kind : {‘introselect‘}, optional
                Selection algorithm. Default is ‘introselect‘.
            order : str or list of str, optional
                When `a` is an array with fields defined, this argument specifies
                which fields to compare first, second, etc. A single field can
                be specified as a string, and not all fields need to be specified,
                but unspecified fields will still be used, in the order in which
                they come up in the dtype, to break ties.
        
            See Also
            --------
            numpy.partition : Return a parititioned copy of an array.
            argpartition : Indirect partition.
            sort : Full sort.
        
            Notes
            -----
            See ``np.partition`` for notes on the different algorithms.
        
            Examples
            --------
            >>> a = np.array([3, 4, 2, 1])
            >>> a.partition(3)
            >>> a
            array([2, 1, 3, 4])
        
            >>> a.partition((1, 3))
            array([1, 2, 3, 4])
        """
        pass

    def prod(self, axis=None, dtype=None, out=None, keepdims=False): # real signature unknown; restored from __doc__
        """
        a.prod(axis=None, dtype=None, out=None, keepdims=False)
        
            Return the product of the array elements over the given axis
        
            Refer to `numpy.prod` for full documentation.
        
            See Also
            --------
            numpy.prod : equivalent function
        """
        pass

    def ptp(self, axis=None, out=None, keepdims=False): # real signature unknown; restored from __doc__
        """
        a.ptp(axis=None, out=None, keepdims=False)
        
            Peak to peak (maximum - minimum) value along a given axis.
        
            Refer to `numpy.ptp` for full documentation.
        
            See Also
            --------
            numpy.ptp : equivalent function
        """
        pass

    def put(self, indices, values, mode=‘raise‘): # real signature unknown; restored from __doc__
        """
        a.put(indices, values, mode=‘raise‘)
        
            Set ``a.flat[n] = values[n]`` for all `n` in indices.
        
            Refer to `numpy.put` for full documentation.
        
            See Also
            --------
            numpy.put : equivalent function
        """
        pass

    def ravel(self, order=None): # real signature unknown; restored from __doc__
        """
        a.ravel([order])
        
            Return a flattened array.
        
            Refer to `numpy.ravel` for full documentation.
        
            See Also
            --------
            numpy.ravel : equivalent function
        
            ndarray.flat : a flat iterator on the array.
        """
        pass

    def repeat(self, repeats, axis=None): # real signature unknown; restored from __doc__
        """
        a.repeat(repeats, axis=None)
        
            Repeat elements of an array.
        
            Refer to `numpy.repeat` for full documentation.
        
            See Also
            --------
            numpy.repeat : equivalent function
        """
        pass

    def reshape(self, shape, *shapes, order=‘C‘): # known case of numpy.core.multiarray.ndarray.reshape
        """
        a.reshape(shape, order=‘C‘)
        
            Returns an array containing the same data with a new shape.
        
            Refer to `numpy.reshape` for full documentation.
        
            See Also
            --------
            numpy.reshape : equivalent function
        
            Notes
            -----
            Unlike the free function `numpy.reshape`, this method on `ndarray` allows
            the elements of the shape parameter to be passed in as separate arguments.
            For example, ``a.reshape(10, 11)`` is equivalent to
            ``a.reshape((10, 11))``.
        """
        pass

    def resize(self, *new_shape, refcheck=True): # known case of numpy.core.multiarray.ndarray.resize
        """
        a.resize(new_shape, refcheck=True)
        
            Change shape and size of array in-place.
        
            Parameters
            ----------
            new_shape : tuple of ints, or `n` ints
                Shape of resized array.
            refcheck : bool, optional
                If False, reference count will not be checked. Default is True.
        
            Returns
            -------
            None
        
            Raises
            ------
            ValueError
                If `a` does not own its own data or references or views to it exist,
                and the data memory must be changed.
                PyPy only: will always raise if the data memory must be changed, since
                there is no reliable way to determine if references or views to it
                exist.
        
            SystemError
                If the `order` keyword argument is specified. This behaviour is a
                bug in NumPy.
        
            See Also
            --------
            resize : Return a new array with the specified shape.
        
            Notes
            -----
            This reallocates space for the data area if necessary.
        
            Only contiguous arrays (data elements consecutive in memory) can be
            resized.
        
            The purpose of the reference count check is to make sure you
            do not use this array as a buffer for another Python object and then
            reallocate the memory. However, reference counts can increase in
            other ways so if you are sure that you have not shared the memory
            for this array with another Python object, then you may safely set
            `refcheck` to False.
        
            Examples
            --------
            Shrinking an array: array is flattened (in the order that the data are
            stored in memory), resized, and reshaped:
        
            >>> a = np.array([[0, 1], [2, 3]], order=‘C‘)
            >>> a.resize((2, 1))
            >>> a
            array([[0],
                   [1]])
        
            >>> a = np.array([[0, 1], [2, 3]], order=‘F‘)
            >>> a.resize((2, 1))
            >>> a
            array([[0],
                   [2]])
        
            Enlarging an array: as above, but missing entries are filled with zeros:
        
            >>> b = np.array([[0, 1], [2, 3]])
            >>> b.resize(2, 3) # new_shape parameter doesn‘t have to be a tuple
            >>> b
            array([[0, 1, 2],
                   [3, 0, 0]])
        
            Referencing an array prevents resizing...
        
            >>> c = a
            >>> a.resize((1, 1))
            Traceback (most recent call last):
            ...
            ValueError: cannot resize an array that has been referenced ...
        
            Unless `refcheck` is False:
        
            >>> a.resize((1, 1), refcheck=False)
            >>> a
            array([[0]])
            >>> c
            array([[0]])
        """
        pass

    def round(self, decimals=0, out=None): # real signature unknown; restored from __doc__
        """
        a.round(decimals=0, out=None)
        
            Return `a` with each element rounded to the given number of decimals.
        
            Refer to `numpy.around` for full documentation.
        
            See Also
            --------
            numpy.around : equivalent function
        """
        pass

    def searchsorted(self, v, side=‘left‘, sorter=None): # real signature unknown; restored from __doc__
        """
        a.searchsorted(v, side=‘left‘, sorter=None)
        
            Find indices where elements of v should be inserted in a to maintain order.
        
            For full documentation, see `numpy.searchsorted`
        
            See Also
            --------
            numpy.searchsorted : equivalent function
        """
        pass

    def setfield(self, val, dtype, offset=0): # real signature unknown; restored from __doc__
        """
        a.setfield(val, dtype, offset=0)
        
            Put a value into a specified place in a field defined by a data-type.
        
            Place `val` into `a`‘s field defined by `dtype` and beginning `offset`
            bytes into the field.
        
            Parameters
            ----------
            val : object
                Value to be placed in field.
            dtype : dtype object
                Data-type of the field in which to place `val`.
            offset : int, optional
                The number of bytes into the field at which to place `val`.
        
            Returns
            -------
            None
        
            See Also
            --------
            getfield
        
            Examples
            --------
            >>> x = np.eye(3)
            >>> x.getfield(np.float64)
            array([[ 1.,  0.,  0.],
                   [ 0.,  1.,  0.],
                   [ 0.,  0.,  1.]])
            >>> x.setfield(3, np.int32)
            >>> x.getfield(np.int32)
            array([[3, 3, 3],
                   [3, 3, 3],
                   [3, 3, 3]])
            >>> x
            array([[  1.00000000e+000,   1.48219694e-323,   1.48219694e-323],
                   [  1.48219694e-323,   1.00000000e+000,   1.48219694e-323],
                   [  1.48219694e-323,   1.48219694e-323,   1.00000000e+000]])
            >>> x.setfield(np.eye(3), np.int32)
            >>> x
            array([[ 1.,  0.,  0.],
                   [ 0.,  1.,  0.],
                   [ 0.,  0.,  1.]])
        """
        pass

    def setflags(self, write=None, align=None, uic=None): # real signature unknown; restored from __doc__
        """
        a.setflags(write=None, align=None, uic=None)
        
            Set array flags WRITEABLE, ALIGNED, (WRITEBACKIFCOPY and UPDATEIFCOPY),
            respectively.
        
            These Boolean-valued flags affect how numpy interprets the memory
            area used by `a` (see Notes below). The ALIGNED flag can only
            be set to True if the data is actually aligned according to the type.
            The WRITEBACKIFCOPY and (deprecated) UPDATEIFCOPY flags can never be set
            to True. The flag WRITEABLE can only be set to True if the array owns its
            own memory, or the ultimate owner of the memory exposes a writeable buffer
            interface, or is a string. (The exception for string is made so that
            unpickling can be done without copying memory.)
        
            Parameters
            ----------
            write : bool, optional
                Describes whether or not `a` can be written to.
            align : bool, optional
                Describes whether or not `a` is aligned properly for its type.
            uic : bool, optional
                Describes whether or not `a` is a copy of another "base" array.
        
            Notes
            -----
            Array flags provide information about how the memory area used
            for the array is to be interpreted. There are 7 Boolean flags
            in use, only four of which can be changed by the user:
            WRITEBACKIFCOPY, UPDATEIFCOPY, WRITEABLE, and ALIGNED.
        
            WRITEABLE (W) the data area can be written to;
        
            ALIGNED (A) the data and strides are aligned appropriately for the hardware
            (as determined by the compiler);
        
            UPDATEIFCOPY (U) (deprecated), replaced by WRITEBACKIFCOPY;
        
            WRITEBACKIFCOPY (X) this array is a copy of some other array (referenced
            by .base). When the C-API function PyArray_ResolveWritebackIfCopy is
            called, the base array will be updated with the contents of this array.
        
            All flags can be accessed using the single (upper case) letter as well
            as the full name.
        
            Examples
            --------
            >>> y
            array([[3, 1, 7],
                   [2, 0, 0],
                   [8, 5, 9]])
            >>> y.flags
              C_CONTIGUOUS : True
              F_CONTIGUOUS : False
              OWNDATA : True
              WRITEABLE : True
              ALIGNED : True
              WRITEBACKIFCOPY : False
              UPDATEIFCOPY : False
            >>> y.setflags(write=0, align=0)
            >>> y.flags
              C_CONTIGUOUS : True
              F_CONTIGUOUS : False
              OWNDATA : True
              WRITEABLE : False
              ALIGNED : False
              WRITEBACKIFCOPY : False
              UPDATEIFCOPY : False
            >>> y.setflags(uic=1)
            Traceback (most recent call last):
              File "<stdin>", line 1, in <module>
            ValueError: cannot set WRITEBACKIFCOPY flag to True
        """
        pass

    def sort(self, axis=-1, kind=‘quicksort‘, order=None): # real signature unknown; restored from __doc__
        """
        a.sort(axis=-1, kind=‘quicksort‘, order=None)
        
            Sort an array, in-place.
        
            Parameters
            ----------
            axis : int, optional
                Axis along which to sort. Default is -1, which means sort along the
                last axis.
            kind : {‘quicksort‘, ‘mergesort‘, ‘heapsort‘, ‘stable‘}, optional
                Sorting algorithm. Default is ‘quicksort‘.
            order : str or list of str, optional
                When `a` is an array with fields defined, this argument specifies
                which fields to compare first, second, etc.  A single field can
                be specified as a string, and not all fields need be specified,
                but unspecified fields will still be used, in the order in which
                they come up in the dtype, to break ties.
        
            See Also
            --------
            numpy.sort : Return a sorted copy of an array.
            argsort : Indirect sort.
            lexsort : Indirect stable sort on multiple keys.
            searchsorted : Find elements in sorted array.
            partition: Partial sort.
        
            Notes
            -----
            See ``sort`` for notes on the different sorting algorithms.
        
            Examples
            --------
            >>> a = np.array([[1,4], [3,1]])
            >>> a.sort(axis=1)
            >>> a
            array([[1, 4],
                   [1, 3]])
            >>> a.sort(axis=0)
            >>> a
            array([[1, 3],
                   [1, 4]])
        
            Use the `order` keyword to specify a field to use when sorting a
            structured array:
        
            >>> a = np.array([(‘a‘, 2), (‘c‘, 1)], dtype=[(‘x‘, ‘S1‘), (‘y‘, int)])
            >>> a.sort(order=‘y‘)
            >>> a
            array([(‘c‘, 1), (‘a‘, 2)],
                  dtype=[(‘x‘, ‘|S1‘), (‘y‘, ‘<i4‘)])
        """
        pass

    def squeeze(self, axis=None): # real signature unknown; restored from __doc__
        """
        a.squeeze(axis=None)
        
            Remove single-dimensional entries from the shape of `a`.
        
            Refer to `numpy.squeeze` for full documentation.
        
            See Also
            --------
            numpy.squeeze : equivalent function
        """
        pass

    def std(self, axis=None, dtype=None, out=None, ddof=0, keepdims=False): # real signature unknown; restored from __doc__
        """
        a.std(axis=None, dtype=None, out=None, ddof=0, keepdims=False)
        
            Returns the standard deviation of the array elements along given axis.
        
            Refer to `numpy.std` for full documentation.
        
            See Also
            --------
            numpy.std : equivalent function
        """
        pass

    def sum(self, axis=None, dtype=None, out=None, keepdims=False): # real signature unknown; restored from __doc__
        """
        a.sum(axis=None, dtype=None, out=None, keepdims=False)
        
            Return the sum of the array elements over the given axis.
        
            Refer to `numpy.sum` for full documentation.
        
            See Also
            --------
            numpy.sum : equivalent function
        """
        pass

    def swapaxes(self, axis1, axis2): # real signature unknown; restored from __doc__
        """
        a.swapaxes(axis1, axis2)
        
            Return a view of the array with `axis1` and `axis2` interchanged.
        
            Refer to `numpy.swapaxes` for full documentation.
        
            See Also
            --------
            numpy.swapaxes : equivalent function
        """
        pass

    def take(self, indices, axis=None, out=None, mode=‘raise‘): # real signature unknown; restored from __doc__
        """
        a.take(indices, axis=None, out=None, mode=‘raise‘)
        
            Return an array formed from the elements of `a` at the given indices.
        
            Refer to `numpy.take` for full documentation.
        
            See Also
            --------
            numpy.take : equivalent function
        """
        pass

    def tobytes(self, order=‘C‘): # real signature unknown; restored from __doc__
        """
        a.tobytes(order=‘C‘)
        
            Construct Python bytes containing the raw data bytes in the array.
        
            Constructs Python bytes showing a copy of the raw contents of
            data memory. The bytes object can be produced in either ‘C‘ or ‘Fortran‘,
            or ‘Any‘ order (the default is ‘C‘-order). ‘Any‘ order means C-order
            unless the F_CONTIGUOUS flag in the array is set, in which case it
            means ‘Fortran‘ order.
        
            .. versionadded:: 1.9.0
        
            Parameters
            ----------
            order : {‘C‘, ‘F‘, None}, optional
                Order of the data for multidimensional arrays:
                C, Fortran, or the same as for the original array.
        
            Returns
            -------
            s : bytes
                Python bytes exhibiting a copy of `a`‘s raw data.
        
            Examples
            --------
            >>> x = np.array([[0, 1], [2, 3]])
            >>> x.tobytes()
            b‘x00x00x00x00x01x00x00x00x02x00x00x00x03x00x00x00‘
            >>> x.tobytes(‘C‘) == x.tobytes()
            True
            >>> x.tobytes(‘F‘)
            b‘x00x00x00x00x02x00x00x00x01x00x00x00x03x00x00x00‘
        """
        pass

    def tofile(self, fid, sep="", format="%s"): # real signature unknown; restored from __doc__
        """
        a.tofile(fid, sep="", format="%s")
        
            Write array to a file as text or binary (default).
        
            Data is always written in ‘C‘ order, independent of the order of `a`.
            The data produced by this method can be recovered using the function
            fromfile().
        
            Parameters
            ----------
            fid : file or str
                An open file object, or a string containing a filename.
            sep : str
                Separator between array items for text output.
                If "" (empty), a binary file is written, equivalent to
                ``file.write(a.tobytes())``.
            format : str
                Format string for text file output.
                Each entry in the array is formatted to text by first converting
                it to the closest Python type, and then using "format" % item.
        
            Notes
            -----
            This is a convenience function for quick storage of array data.
            Information on endianness and precision is lost, so this method is not a
            good choice for files intended to archive data or transport data between
            machines with different endianness. Some of these problems can be overcome
            by outputting the data as text files, at the expense of speed and file
            size.
            
            When fid is a file object, array contents are directly written to the
            file, bypassing the file object‘s ``write`` method. As a result, tofile
            cannot be used with files objects supporting compression (e.g., GzipFile)
            or file-like objects that do not support ``fileno()`` (e.g., BytesIO).
        """
        pass

    def tolist(self): # real signature unknown; restored from __doc__
        """
        a.tolist()
        
            Return the array as a (possibly nested) list.
        
            Return a copy of the array data as a (nested) Python list.
            Data items are converted to the nearest compatible Python type.
        
            Parameters
            ----------
            none
        
            Returns
            -------
            y : list
                The possibly nested list of array elements.
        
            Notes
            -----
            The array may be recreated, ``a = np.array(a.tolist())``.
        
            Examples
            --------
            >>> a = np.array([1, 2])
            >>> a.tolist()
            [1, 2]
            >>> a = np.array([[1, 2], [3, 4]])
            >>> list(a)
            [array([1, 2]), array([3, 4])]
            >>> a.tolist()
            [[1, 2], [3, 4]]
        """
        pass

    def tostring(self, order=‘C‘): # real signature unknown; restored from __doc__
        """
        a.tostring(order=‘C‘)
        
            Construct Python bytes containing the raw data bytes in the array.
        
            Constructs Python bytes showing a copy of the raw contents of
            data memory. The bytes object can be produced in either ‘C‘ or ‘Fortran‘,
            or ‘Any‘ order (the default is ‘C‘-order). ‘Any‘ order means C-order
            unless the F_CONTIGUOUS flag in the array is set, in which case it
            means ‘Fortran‘ order.
        
            This function is a compatibility alias for tobytes. Despite its name it returns bytes not strings.
        
            Parameters
            ----------
            order : {‘C‘, ‘F‘, None}, optional
                Order of the data for multidimensional arrays:
                C, Fortran, or the same as for the original array.
        
            Returns
            -------
            s : bytes
                Python bytes exhibiting a copy of `a`‘s raw data.
        
            Examples
            --------
            >>> x = np.array([[0, 1], [2, 3]])
            >>> x.tobytes()
            b‘x00x00x00x00x01x00x00x00x02x00x00x00x03x00x00x00‘
            >>> x.tobytes(‘C‘) == x.tobytes()
            True
            >>> x.tobytes(‘F‘)
            b‘x00x00x00x00x02x00x00x00x01x00x00x00x03x00x00x00‘
        """
        pass

    def trace(self, offset=0, axis1=0, axis2=1, dtype=None, out=None): # real signature unknown; restored from __doc__
        """
        a.trace(offset=0, axis1=0, axis2=1, dtype=None, out=None)
        
            Return the sum along diagonals of the array.
        
            Refer to `numpy.trace` for full documentation.
        
            See Also
            --------
            numpy.trace : equivalent function
        """
        pass

    def transpose(self, *axes): # real signature unknown; restored from __doc__
        """
        a.transpose(*axes)
        
            Returns a view of the array with axes transposed.
        
            For a 1-D array, this has no effect. (To change between column and
            row vectors, first cast the 1-D array into a matrix object.)
            For a 2-D array, this is the usual matrix transpose.
            For an n-D array, if axes are given, their order indicates how the
            axes are permuted (see Examples). If axes are not provided and
            ``a.shape = (i[0], i[1], ... i[n-2], i[n-1])``, then
            ``a.transpose().shape = (i[n-1], i[n-2], ... i[1], i[0])``.
        
            Parameters
            ----------
            axes : None, tuple of ints, or `n` ints
        
             * None or no argument: reverses the order of the axes.
        
             * tuple of ints: `i` in the `j`-th place in the tuple means `a`‘s
               `i`-th axis becomes `a.transpose()`‘s `j`-th axis.
        
             * `n` ints: same as an n-tuple of the same ints (this form is
               intended simply as a "convenience" alternative to the tuple form)
        
            Returns
            -------
            out : ndarray
                View of `a`, with axes suitably permuted.
        
            See Also
            --------
            ndarray.T : Array property returning the array transposed.
        
            Examples
            --------
            >>> a = np.array([[1, 2], [3, 4]])
            >>> a
            array([[1, 2],
                   [3, 4]])
            >>> a.transpose()
            array([[1, 3],
                   [2, 4]])
            >>> a.transpose((1, 0))
            array([[1, 3],
                   [2, 4]])
            >>> a.transpose(1, 0)
            array([[1, 3],
                   [2, 4]])
        """
        pass

    def var(self, axis=None, dtype=None, out=None, ddof=0, keepdims=False): # real signature unknown; restored from __doc__
        """
        a.var(axis=None, dtype=None, out=None, ddof=0, keepdims=False)
        
            Returns the variance of the array elements, along given axis.
        
            Refer to `numpy.var` for full documentation.
        
            See Also
            --------
            numpy.var : equivalent function
        """
        pass

    def view(self, dtype=None, type=None): # real signature unknown; restored from __doc__
        """
        a.view(dtype=None, type=None)
        
            New view of array with the same data.
        
            Parameters
            ----------
            dtype : data-type or ndarray sub-class, optional
                Data-type descriptor of the returned view, e.g., float32 or int16. The
                default, None, results in the view having the same data-type as `a`.
                This argument can also be specified as an ndarray sub-class, which
                then specifies the type of the returned object (this is equivalent to
                setting the ``type`` parameter).
            type : Python type, optional
                Type of the returned view, e.g., ndarray or matrix.  Again, the
                default None results in type preservation.
        
            Notes
            -----
            ``a.view()`` is used two different ways:
        
            ``a.view(some_dtype)`` or ``a.view(dtype=some_dtype)`` constructs a view
            of the array‘s memory with a different data-type.  This can cause a
            reinterpretation of the bytes of memory.
        
            ``a.view(ndarray_subclass)`` or ``a.view(type=ndarray_subclass)`` just
            returns an instance of `ndarray_subclass` that looks at the same array
            (same shape, dtype, etc.)  This does not cause a reinterpretation of the
            memory.
        
            For ``a.view(some_dtype)``, if ``some_dtype`` has a different number of
            bytes per entry than the previous dtype (for example, converting a
            regular array to a structured array), then the behavior of the view
            cannot be predicted just from the superficial appearance of ``a`` (shown
            by ``print(a)``). It also depends on exactly how ``a`` is stored in
            memory. Therefore if ``a`` is C-ordered versus fortran-ordered, versus
            defined as a slice or transpose, etc., the view may give different
            results.
        
        
            Examples
            --------
            >>> x = np.array([(1, 2)], dtype=[(‘a‘, np.int8), (‘b‘, np.int8)])
        
            Viewing array data using a different type and dtype:
        
            >>> y = x.view(dtype=np.int16, type=np.matrix)
            >>> y
            matrix([[513]], dtype=int16)
            >>> print(type(y))
            <class ‘numpy.matrixlib.defmatrix.matrix‘>
        
            Creating a view on a structured array so it can be used in calculations
        
            >>> x = np.array([(1, 2),(3,4)], dtype=[(‘a‘, np.int8), (‘b‘, np.int8)])
            >>> xv = x.view(dtype=np.int8).reshape(-1,2)
            >>> xv
            array([[1, 2],
                   [3, 4]], dtype=int8)
            >>> xv.mean(0)
            array([ 2.,  3.])
        
            Making changes to the view changes the underlying array
        
            >>> xv[0,1] = 20
            >>> print(x)
            [(1, 20) (3, 4)]
        
            Using a view to convert an array to a recarray:
        
            >>> z = x.view(np.recarray)
            >>> z.a
            array([1], dtype=int8)
        
            Views share data:
        
            >>> x[0] = (9, 10)
            >>> z[0]
            (9, 10)
        
            Views that change the dtype size (bytes per entry) should normally be
            avoided on arrays defined by slices, transposes, fortran-ordering, etc.:
        
            >>> x = np.array([[1,2,3],[4,5,6]], dtype=np.int16)
            >>> y = x[:, 0:2]
            >>> y
            array([[1, 2],
                   [4, 5]], dtype=int16)
            >>> y.view(dtype=[(‘width‘, np.int16), (‘length‘, np.int16)])
            Traceback (most recent call last):
              File "<stdin>", line 1, in <module>
            ValueError: new type not compatible with array.
            >>> z = y.copy()
            >>> z.view(dtype=[(‘width‘, np.int16), (‘length‘, np.int16)])
            array([[(1, 2)],
                   [(4, 5)]], dtype=[(‘width‘, ‘<i2‘), (‘length‘, ‘<i2‘)])
        """
        pass

    def __abs__(self, *args, **kwargs): # real signature unknown
        """ abs(self) """
        pass

    def __add__(self, *args, **kwargs): # real signature unknown
        """ Return self+value. """
        pass

    def __and__(self, *args, **kwargs): # real signature unknown
        """ Return self&value. """
        pass

    def __array_prepare__(self, obj): # real signature unknown; restored from __doc__
        """ a.__array_prepare__(obj) -> Object of same type as ndarray object obj. """
        pass

    def __array_ufunc__(self, *args, **kwargs): # real signature unknown
        pass

    def __array_wrap__(self, obj): # real signature unknown; restored from __doc__
        """ a.__array_wrap__(obj) -> Object of same type as ndarray object a. """
        pass

    def __array__(self, dtype=None): # known case of numpy.core.multiarray.ndarray.__array__
        """
        a.__array__(|dtype) -> reference if type unchanged, copy otherwise.
        
            Returns either a new reference to self if dtype is not given or a new array
            of provided data type if dtype is different from the current dtype of the
            array.
        """
        pass

    def __bool__(self, *args, **kwargs): # real signature unknown
        """ self != 0 """
        pass

    def __complex__(self, *args, **kwargs): # real signature unknown
        pass

    def __contains__(self, *args, **kwargs): # real signature unknown
        """ Return key in self. """
        pass

    def __copy__(self): # real signature unknown; restored from __doc__
        """
        a.__copy__()
        
            Used if :func:`copy.copy` is called on an array. Returns a copy of the array.
        
            Equivalent to ``a.copy(order=‘K‘)``.
        """
        pass

    def __deepcopy__(self, memo, *args, **kwargs): # real signature unknown; NOTE: unreliably restored from __doc__ 
        """
        a.__deepcopy__(memo, /) -> Deep copy of array.
        
            Used if :func:`copy.deepcopy` is called on an array.
        """
        pass

    def __delitem__(self, *args, **kwargs): # real signature unknown
        """ Delete self[key]. """
        pass

    def __divmod__(self, *args, **kwargs): # real signature unknown
        """ Return divmod(self, value). """
        pass

    def __eq__(self, *args, **kwargs): # real signature unknown
        """ Return self==value. """
        pass

    def __float__(self, *args, **kwargs): # real signature unknown
        """ float(self) """
        pass

    def __floordiv__(self, *args, **kwargs): # real signature unknown
        """ Return self//value. """
        pass

    def __format__(self, *args, **kwargs): # real signature unknown
        pass

    def __getitem__(self, *args, **kwargs): # real signature unknown
        """ Return self[key]. """
        pass

    def __ge__(self, *args, **kwargs): # real signature unknown
        """ Return self>=value. """
        pass

    def __gt__(self, *args, **kwargs): # real signature unknown
        """ Return self>value. """
        pass

    def __iadd__(self, *args, **kwargs): # real signature unknown
        """ Return self+=value. """
        pass

    def __iand__(self, *args, **kwargs): # real signature unknown
        """ Return self&=value. """
        pass

    def __ifloordiv__(self, *args, **kwargs): # real signature unknown
        """ Return self//=value. """
        pass

    def __ilshift__(self, *args, **kwargs): # real signature unknown
        """ Return self<<=value. """
        pass

    def __imatmul__(self, *args, **kwargs): # real signature unknown
        """ Return [email protected]=value. """
        pass

    def __imod__(self, *args, **kwargs): # real signature unknown
        """ Return self%=value. """
        pass

    def __imul__(self, *args, **kwargs): # real signature unknown
        """ Return self*=value. """
        pass

    def __index__(self, *args, **kwargs): # real signature unknown
        """ Return self converted to an integer, if self is suitable for use as an index into a list. """
        pass

    def __init__(self, shape, dtype=None, buffer=None, offset=0, strides=None, order=None): # real signature unknown; restored from __doc__
        pass

    def __int__(self, *args, **kwargs): # real signature unknown
        """ int(self) """
        pass

    def __invert__(self, *args, **kwargs): # real signature unknown
        """ ~self """
        pass

    def __ior__(self, *args, **kwargs): # real signature unknown
        """ Return self|=value. """
        pass

    def __ipow__(self, *args, **kwargs): # real signature unknown
        """ Return self**=value. """
        pass

    def __irshift__(self, *args, **kwargs): # real signature unknown
        """ Return self>>=value. """
        pass

    def __isub__(self, *args, **kwargs): # real signature unknown
        """ Return self-=value. """
        pass

    def __iter__(self, *args, **kwargs): # real signature unknown
        """ Implement iter(self). """
        pass

    def __itruediv__(self, *args, **kwargs): # real signature unknown
        """ Return self/=value. """
        pass

    def __ixor__(self, *args, **kwargs): # real signature unknown
        """ Return self^=value. """
        pass

    def __len__(self, *args, **kwargs): # real signature unknown
        """ Return len(self). """
        pass

    def __le__(self, *args, **kwargs): # real signature unknown
        """ Return self<=value. """
        pass

    def __lshift__(self, *args, **kwargs): # real signature unknown
        """ Return self<<value. """
        pass

    def __lt__(self, *args, **kwargs): # real signature unknown
        """ Return self<value. """
        pass

    def __matmul__(self, *args, **kwargs): # real signature unknown
        """ Return [email protected] """
        pass

    def __mod__(self, *args, **kwargs): # real signature unknown
        """ Return self%value. """
        pass

    def __mul__(self, *args, **kwargs): # real signature unknown
        """ Return self*value. """
        pass

    def __neg__(self, *args, **kwargs): # real signature unknown
        """ -self """
        pass

    @staticmethod # known case of __new__
    def __new__(*args, **kwargs): # real signature unknown
        """ Create and return a new object.  See help(type) for accurate signature. """
        pass

    def __ne__(self, *args, **kwargs): # real signature unknown
        """ Return self!=value. """
        pass

    def __or__(self, *args, **kwargs): # real signature unknown
        """ Return self|value. """
        pass

    def __pos__(self, *args, **kwargs): # real signature unknown
        """ +self """
        pass

    def __pow__(self, *args, **kwargs): # real signature unknown
        """ Return pow(self, value, mod). """
        pass

    def __radd__(self, *args, **kwargs): # real signature unknown
        """ Return value+self. """
        pass

    def __rand__(self, *args, **kwargs): # real signature unknown
        """ Return value&self. """
        pass

    def __rdivmod__(self, *args, **kwargs): # real signature unknown
        """ Return divmod(value, self). """
        pass

    def __reduce__(self): # real signature unknown; restored from __doc__
        """
        a.__reduce__()
        
            For pickling.
        """
        pass

    def __repr__(self, *args, **kwargs): # real signature unknown
        """ Return repr(self). """
        pass

    def __rfloordiv__(self, *args, **kwargs): # real signature unknown
        """ Return value//self. """
        pass

    def __rlshift__(self, *args, **kwargs): # real signature unknown
        """ Return value<<self. """
        pass

    def __rmatmul__(self, *args, **kwargs): # real signature unknown
        """ Return [email protected] """
        pass

    def __rmod__(self, *args, **kwargs): # real signature unknown
        """ Return value%self. """
        pass

    def __rmul__(self, *args, **kwargs): # real signature unknown
        """ Return value*self. """
        pass

    def __ror__(self, *args, **kwargs): # real signature unknown
        """ Return value|self. """
        pass

    def __rpow__(self, *args, **kwargs): # real signature unknown
        """ Return pow(value, self, mod). """
        pass

    def __rrshift__(self, *args, **kwargs): # real signature unknown
        """ Return value>>self. """
        pass

    def __rshift__(self, *args, **kwargs): # real signature unknown
        """ Return self>>value. """
        pass

    def __rsub__(self, *args, **kwargs): # real signature unknown
        """ Return value-self. """
        pass

    def __rtruediv__(self, *args, **kwargs): # real signature unknown
        """ Return value/self. """
        pass

    def __rxor__(self, *args, **kwargs): # real signature unknown
        """ Return value^self. """
        pass

    def __setitem__(self, *args, **kwargs): # real signature unknown
        """ Set self[key] to value. """
        pass

    def __setstate__(self, state, *args, **kwargs): # real signature unknown; NOTE: unreliably restored from __doc__ 
        """
        a.__setstate__(state, /)
        
            For unpickling.
        
            The `state` argument must be a sequence that contains the following
            elements:
        
            Parameters
            ----------
            version : int
                optional pickle version. If omitted defaults to 0.
            shape : tuple
            dtype : data-type
            isFortran : bool
            rawdata : string or list
                a binary string with the data (or a list if ‘a‘ is an object array)
        """
        pass

    def __sizeof__(self, *args, **kwargs): # real signature unknown
        pass

    def __str__(self, *args, **kwargs): # real signature unknown
        """ Return str(self). """
        pass

    def __sub__(self, *args, **kwargs): # real signature unknown
        """ Return self-value. """
        pass

    def __truediv__(self, *args, **kwargs): # real signature unknown
        """ Return self/value. """
        pass

    def __xor__(self, *args, **kwargs): # real signature unknown
        """ Return self^value. """
        pass

    base = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """Base object if memory is from some other object.

    Examples
    --------
    The base of an array that owns its memory is None:

    >>> x = np.array([1,2,3,4])
    >>> x.base is None
    True

    Slicing creates a view, whose memory is shared with x:

    >>> y = x[2:]
    >>> y.base is x
    True"""

    ctypes = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """An object to simplify the interaction of the array with the ctypes
    module.

    This attribute creates an object that makes it easier to use arrays
    when calling shared libraries with the ctypes module. The returned
    object has, among others, data, shape, and strides attributes (see
    Notes below) which themselves return ctypes objects that can be used
    as arguments to a shared library.

    Parameters
    ----------
    None

    Returns
    -------
    c : Python object
        Possessing attributes data, shape, strides, etc.

    See Also
    --------
    numpy.ctypeslib

    Notes
    -----
    Below are the public attributes of this object which were documented
    in "Guide to NumPy" (we have omitted undocumented public attributes,
    as well as documented private attributes):

    * data: A pointer to the memory area of the array as a Python integer.
      This memory area may contain data that is not aligned, or not in correct
      byte-order. The memory area may not even be writeable. The array
      flags and data-type of this array should be respected when passing this
      attribute to arbitrary C-code to avoid trouble that can include Python
      crashing. User Beware! The value of this attribute is exactly the same
      as self._array_interface_[‘data‘][0].

    * shape (c_intp*self.ndim): A ctypes array of length self.ndim where
      the basetype is the C-integer corresponding to dtype(‘p‘) on this
      platform. This base-type could be c_int, c_long, or c_longlong
      depending on the platform. The c_intp type is defined accordingly in
      numpy.ctypeslib. The ctypes array contains the shape of the underlying
      array.

    * strides (c_intp*self.ndim): A ctypes array of length self.ndim where
      the basetype is the same as for the shape attribute. This ctypes array
      contains the strides information from the underlying array. This strides
      information is important for showing how many bytes must be jumped to
      get to the next element in the array.

    * data_as(obj): Return the data pointer cast to a particular c-types object.
      For example, calling self._as_parameter_ is equivalent to
      self.data_as(ctypes.c_void_p). Perhaps you want to use the data as a
      pointer to a ctypes array of floating-point data:
      self.data_as(ctypes.POINTER(ctypes.c_double)).

    * shape_as(obj): Return the shape tuple as an array of some other c-types
      type. For example: self.shape_as(ctypes.c_short).

    * strides_as(obj): Return the strides tuple as an array of some other
      c-types type. For example: self.strides_as(ctypes.c_longlong).

    Be careful using the ctypes attribute - especially on temporary
    arrays or arrays constructed on the fly. For example, calling
    ``(a+b).ctypes.data_as(ctypes.c_void_p)`` returns a pointer to memory
    that is invalid because the array created as (a+b) is deallocated
    before the next Python statement. You can avoid this problem using
    either ``c=a+b`` or ``ct=(a+b).ctypes``. In the latter case, ct will
    hold a reference to the array until ct is deleted or re-assigned.

    If the ctypes module is not available, then the ctypes attribute
    of array objects still returns something useful, but ctypes objects
    are not returned and errors may be raised instead. In particular,
    the object will still have the as parameter attribute which will
    return an integer equal to the data attribute.

    Examples
    --------
    >>> import ctypes
    >>> x
    array([[0, 1],
           [2, 3]])
    >>> x.ctypes.data
    30439712
    >>> x.ctypes.data_as(ctypes.POINTER(ctypes.c_long))
    <ctypes.LP_c_long object at 0x01F01300>
    >>> x.ctypes.data_as(ctypes.POINTER(ctypes.c_long)).contents
    c_long(0)
    >>> x.ctypes.data_as(ctypes.POINTER(ctypes.c_longlong)).contents
    c_longlong(4294967296L)
    >>> x.ctypes.shape
    <numpy.core._internal.c_long_Array_2 object at 0x01FFD580>
    >>> x.ctypes.shape_as(ctypes.c_long)
    <numpy.core._internal.c_long_Array_2 object at 0x01FCE620>
    >>> x.ctypes.strides
    <numpy.core._internal.c_long_Array_2 object at 0x01FCE620>
    >>> x.ctypes.strides_as(ctypes.c_longlong)
    <numpy.core._internal.c_longlong_Array_2 object at 0x01F01300>"""

    data = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """Python buffer object pointing to the start of the array‘s data."""

    dtype = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """Data-type of the array‘s elements.

    Parameters
    ----------
    None

    Returns
    -------
    d : numpy dtype object

    See Also
    --------
    numpy.dtype

    Examples
    --------
    >>> x
    array([[0, 1],
           [2, 3]])
    >>> x.dtype
    dtype(‘int32‘)
    >>> type(x.dtype)
    <type ‘numpy.dtype‘>"""

    flags = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """Information about the memory layout of the array.

    Attributes
    ----------
    C_CONTIGUOUS (C)
        The data is in a single, C-style contiguous segment.
    F_CONTIGUOUS (F)
        The data is in a single, Fortran-style contiguous segment.
    OWNDATA (O)
        The array owns the memory it uses or borrows it from another object.
    WRITEABLE (W)
        The data area can be written to.  Setting this to False locks
        the data, making it read-only.  A view (slice, etc.) inherits WRITEABLE
        from its base array at creation time, but a view of a writeable
        array may be subsequently locked while the base array remains writeable.
        (The opposite is not true, in that a view of a locked array may not
        be made writeable.  However, currently, locking a base object does not
        lock any views that already reference it, so under that circumstance it
        is possible to alter the contents of a locked array via a previously
        created writeable view onto it.)  Attempting to change a non-writeable
        array raises a RuntimeError exception.
    ALIGNED (A)
        The data and all elements are aligned appropriately for the hardware.
    WRITEBACKIFCOPY (X)
        This array is a copy of some other array. The C-API function
        PyArray_ResolveWritebackIfCopy must be called before deallocating
        to the base array will be updated with the contents of this array.
    UPDATEIFCOPY (U)
        (Deprecated, use WRITEBACKIFCOPY) This array is a copy of some other array.
        When this array is
        deallocated, the base array will be updated with the contents of
        this array.
    FNC
        F_CONTIGUOUS and not C_CONTIGUOUS.
    FORC
        F_CONTIGUOUS or C_CONTIGUOUS (one-segment test).
    BEHAVED (B)
        ALIGNED and WRITEABLE.
    CARRAY (CA)
        BEHAVED and C_CONTIGUOUS.
    FARRAY (FA)
        BEHAVED and F_CONTIGUOUS and not C_CONTIGUOUS.

    Notes
    -----
    The `flags` object can be accessed dictionary-like (as in ``a.flags[‘WRITEABLE‘]``),
    or by using lowercased attribute names (as in ``a.flags.writeable``). Short flag
    names are only supported in dictionary access.

    Only the WRITEBACKIFCOPY, UPDATEIFCOPY, WRITEABLE, and ALIGNED flags can be
    changed by the user, via direct assignment to the attribute or dictionary
    entry, or by calling `ndarray.setflags`.

    The array flags cannot be set arbitrarily:

    - UPDATEIFCOPY can only be set ``False``.
    - WRITEBACKIFCOPY can only be set ``False``.
    - ALIGNED can only be set ``True`` if the data is truly aligned.
    - WRITEABLE can only be set ``True`` if the array owns its own memory
      or the ultimate owner of the memory exposes a writeable buffer
      interface or is a string.

    Arrays can be both C-style and Fortran-style contiguous simultaneously.
    This is clear for 1-dimensional arrays, but can also be true for higher
    dimensional arrays.

    Even for contiguous arrays a stride for a given dimension
    ``arr.strides[dim]`` may be *arbitrary* if ``arr.shape[dim] == 1``
    or the array has no elements.
    It does *not* generally hold that ``self.strides[-1] == self.itemsize``
    for C-style contiguous arrays or ``self.strides[0] == self.itemsize`` for
    Fortran-style contiguous arrays is true."""

    flat = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """A 1-D iterator over the array.

    This is a `numpy.flatiter` instance, which acts similarly to, but is not
    a subclass of, Python‘s built-in iterator object.

    See Also
    --------
    flatten : Return a copy of the array collapsed into one dimension.

    flatiter

    Examples
    --------
    >>> x = np.arange(1, 7).reshape(2, 3)
    >>> x
    array([[1, 2, 3],
           [4, 5, 6]])
    >>> x.flat[3]
    4
    >>> x.T
    array([[1, 4],
           [2, 5],
           [3, 6]])
    >>> x.T.flat[3]
    5
    >>> type(x.flat)
    <type ‘numpy.flatiter‘>

    An assignment example:

    >>> x.flat = 3; x
    array([[3, 3, 3],
           [3, 3, 3]])
    >>> x.flat[[1,4]] = 1; x
    array([[3, 1, 3],
           [3, 1, 3]])"""

    imag = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """The imaginary part of the array.

    Examples
    --------
    >>> x = np.sqrt([1+0j, 0+1j])
    >>> x.imag
    array([ 0.        ,  0.70710678])
    >>> x.imag.dtype
    dtype(‘float64‘)"""

    itemsize = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """Length of one array element in bytes.

    Examples
    --------
    >>> x = np.array([1,2,3], dtype=np.float64)
    >>> x.itemsize
    8
    >>> x = np.array([1,2,3], dtype=np.complex128)
    >>> x.itemsize
    16"""

    nbytes = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """Total bytes consumed by the elements of the array.

    Notes
    -----
    Does not include memory consumed by non-element attributes of the
    array object.

    Examples
    --------
    >>> x = np.zeros((3,5,2), dtype=np.complex128)
    >>> x.nbytes
    480
    >>> np.prod(x.shape) * x.itemsize
    480"""

    ndim = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """Number of array dimensions.

    Examples
    --------
    >>> x = np.array([1, 2, 3])
    >>> x.ndim
    1
    >>> y = np.zeros((2, 3, 4))
    >>> y.ndim
    3"""

    real = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """The real part of the array.

    Examples
    --------
    >>> x = np.sqrt([1+0j, 0+1j])
    >>> x.real
    array([ 1.        ,  0.70710678])
    >>> x.real.dtype
    dtype(‘float64‘)

    See Also
    --------
    numpy.real : equivalent function"""

    shape = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """Tuple of array dimensions.

    The shape property is usually used to get the current shape of an array,
    but may also be used to reshape the array in-place by assigning a tuple of
    array dimensions to it.  As with `numpy.reshape`, one of the new shape
    dimensions can be -1, in which case its value is inferred from the size of
    the array and the remaining dimensions. Reshaping an array in-place will
    fail if a copy is required.

    Examples
    --------
    >>> x = np.array([1, 2, 3, 4])
    >>> x.shape
    (4,)
    >>> y = np.zeros((2, 3, 4))
    >>> y.shape
    (2, 3, 4)
    >>> y.shape = (3, 8)
    >>> y
    array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])
    >>> y.shape = (3, 6)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: total size of new array must be unchanged
    >>> np.zeros((4,2))[::2].shape = (-1,)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: incompatible shape for a non-contiguous array

    See Also
    --------
    numpy.reshape : similar function
    ndarray.reshape : similar method"""

    size = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """Number of elements in the array.

    Equal to ``np.prod(a.shape)``, i.e., the product of the array‘s
    dimensions.

    Notes
    -----
    `a.size` returns a standard arbitrary precision Python integer. This 
    may not be the case with other methods of obtaining the same value
    (like the suggested ``np.prod(a.shape)``, which returns an instance
    of ``np.int_``), and may be relevant if the value is used further in
    calculations that may overflow a fixed size integer type.

    Examples
    --------
    >>> x = np.zeros((3, 5, 2), dtype=np.complex128)
    >>> x.size
    30
    >>> np.prod(x.shape)
    30"""

    strides = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """Tuple of bytes to step in each dimension when traversing an array.

    The byte offset of element ``(i[0], i[1], ..., i[n])`` in an array `a`
    is::

        offset = sum(np.array(i) * a.strides)

    A more detailed explanation of strides can be found in the
    "ndarray.rst" file in the NumPy reference guide.

    Notes
    -----
    Imagine an array of 32-bit integers (each 4 bytes)::

      x = np.array([[0, 1, 2, 3, 4],
                    [5, 6, 7, 8, 9]], dtype=np.int32)

    This array is stored in memory as 40 bytes, one after the other
    (known as a contiguous block of memory).  The strides of an array tell
    us how many bytes we have to skip in memory to move to the next position
    along a certain axis.  For example, we have to skip 4 bytes (1 value) to
    move to the next column, but 20 bytes (5 values) to get to the same
    position in the next row.  As such, the strides for the array `x` will be
    ``(20, 4)``.

    See Also
    --------
    numpy.lib.stride_tricks.as_strided

    Examples
    --------
    >>> y = np.reshape(np.arange(2*3*4), (2,3,4))
    >>> y
    array([[[ 0,  1,  2,  3],
            [ 4,  5,  6,  7],
            [ 8,  9, 10, 11]],
           [[12, 13, 14, 15],
            [16, 17, 18, 19],
            [20, 21, 22, 23]]])
    >>> y.strides
    (48, 16, 4)
    >>> y[1,1,1]
    17
    >>> offset=sum(y.strides * np.array((1,1,1)))
    >>> offset/y.itemsize
    17

    >>> x = np.reshape(np.arange(5*6*7*8), (5,6,7,8)).transpose(2,3,1,0)
    >>> x.strides
    (32, 4, 224, 1344)
    >>> i = np.array([3,5,2,2])
    >>> offset = sum(i * x.strides)
    >>> x[3,5,2,2]
    813
    >>> offset / x.itemsize
    813"""

    T = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """Same as self.transpose(), except that self is returned if
    self.ndim < 2.

    Examples
    --------
    >>> x = np.array([[1.,2.],[3.,4.]])
    >>> x
    array([[ 1.,  2.],
           [ 3.,  4.]])
    >>> x.T
    array([[ 1.,  3.],
           [ 2.,  4.]])
    >>> x = np.array([1.,2.,3.,4.])
    >>> x
    array([ 1.,  2.,  3.,  4.])
    >>> x.T
    array([ 1.,  2.,  3.,  4.])"""

    __array_finalize__ = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """None."""

    __array_interface__ = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """Array protocol: Python side."""

    __array_priority__ = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """Array priority."""

    __array_struct__ = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
    """Array protocol: C-struct side."""


    __hash__ = None

 

2.1   常用ndarray属性:

  • dtype        描述数组元素的类型
  • shape       以tuple表示的数组形状
  • ndim         数组的维度
  • size           数组中元素的个数
  • itemsize    数组中的元素在内存所占字节数
  • T               数组的转置
  • flat            返回一个数组的迭代器,对flat赋值将导致整个数组的元素被覆盖
  • real/imag  给出复数数组的实部/虚部
  • nbytes      数组占用的存储空间
import numpy as np

# 创建简单的列表
a = [1,2,3,4,5,6]

# 讲列表转换为数组
b = np.array(a)

# Numpy查看数组属性
print(b.size)
#6

# 数组形状
print(b.shape)
# (6,)

# 数组维度
print(b.ndim)
# 1

# 数组元素类型
print(b.dtype)
# int32

 

import numpy as np

a = np.array([1,2,3])
print(a)
# [1 2 3]

# 多于一个维度
a = np.array([[1,  2],  [3,  4]])
print(a)
# [[1 2]
#  [3 4]]

# 最小维度
a = np.array([1,  2,  3,4,5], ndmin =  2)
print(a)
# [[1 2 3 4 5]]

# dtype 参数
a = np.array([1,  2,  3], dtype = complex)
print(a)
# [1.+0.j 2.+0.j 3.+0.j]

   ndarray 对象由计算机内存中的一维连续区域组成,带有将每个元素映射到内存块中某个位置的索引方案。 内存块以按行(C 风格)或按列(FORTRAN 或 MatLab 风格)的方式保存元素。

2.2  常用ndarray方法

  • reshape(…)                                 返回一个给定shape的数组的副本
  • resize(…)                                    返回给定shape的数组,原数组shape发生改变
  • flatten()/ravel()                            返回展平数组,原数组不改变
  • astype(dtype)                              返回指定元素类型的数组副本
  • fill()                                              将数组元素全部设定为一个标量值
  • sum/Prod()                                  计算所有数组元素的和/积
  • mean()/var()/std()                        返回数组元素的均值/方差/标准差
  • max()/min()/ptp()/median()          返回数组元素的最大值/最小值/取值范围/中位数
  • argmax()/argmin()                       返回最大值/最小值的索引
  • sort()                                           对数组进行排序,axis指定排序的轴;kind指定排序算法,默认是快速排序
  • view()/copy()                               view创造一个新的数组对象指向同一数据;copy是深复制
  • tolist()                                          将数组完全转为列表,注意与直接使用list(array)的区别
  • compress()                                  返回满足条件的元素构成的数组

numpy.reshape:

import numpy as np
a = np.arange(8)
print(‘原始数组:‘)
print(a)
print(‘
‘)

b = a.reshape(4,2)
print(‘修改后的数组:‘)
print(b)

‘‘‘结果
原始数组:
[0 1 2 3 4 5 6 7]


修改后的数组:
[[0 1]
 [2 3]
 [4 5]
 [6 7]]
‘‘‘

 numpy.ndarray.flatten:

import numpy as np
a = np.arange(8).reshape(2,4)

print(‘原数组:‘)
print(a)
print(‘
‘)
# default is column-major

print(‘展开的数组:‘)
print(a.flatten())
print(‘
‘)

print(‘以 F 风格顺序展开的数组:‘)
print(a.flatten(order = ‘F‘))
‘‘‘结果:
原数组:
[[0 1 2 3]
 [4 5 6 7]]


展开的数组:
[0 1 2 3 4 5 6 7]


以 F 风格顺序展开的数组:
[0 4 1 5 2 6 3 7]
‘‘‘

 numpy.ravel:

import numpy as np
a = np.arange(8).reshape(2,4)

print(‘原数组:‘)
print(a)
print(‘
‘)

print(‘调用 ravel 函数之后:‘)
print(a.ravel())
print(‘
‘)

print(‘以 F 风格顺序调用 ravel 函数之后:‘)
print(a.ravel(order = ‘F‘))
‘‘‘结果:
原数组:
[[0 1 2 3]
 [4 5 6 7]]


调用 ravel 函数之后:
[0 1 2 3 4 5 6 7]


以 F 风格顺序调用 ravel 函数之后:
[0 4 1 5 2 6 3 7]‘‘‘

 

 2.3 数组的创建

  numpy中使用array()函数创建数组,array的首个参数一定是一个序列,可以是元组也可以是列表。

2.3.1  一维数组的创建

  可以使用numpy中的arange()函数创建一维有序数组,它是内置函数range的扩展版。

In [1]: import numpy as np

In [2]: ls1 = range(10)

In [3]: list(ls1)

Out[3]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [4]: type(ls1)

Out[4]: range

In [5]: ls2 = np.arange(10)

In [6]: list(ls2)

Out[6]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [7]: type(ls2)

Out[7]: numpy.ndarray

   通过arange生成的序列就不是简简单单的列表类型了,而是一个一维数组。

如果一维数组不是一个规律的有序元素,而是人为的输入,就需要array()函数创建了。

In [8]: arr1 = np.array((1,20,13,28,22))

In [9]: arr1

Out[9]: array([ 1, 20, 13, 28, 22])

In [10]: type(arr1)

Out[10]: numpy.ndarray

   上面是由元组序列构成的一维数组。

In [11]: arr2 = np.array([1,1,2,3,5,8,13,21])    

In [12]: arr2

Out[12]: array([ 1,  1,  2,  3,  5,  8, 13, 21])

In [13]: type(arr2)

Out[13]: numpy.ndarray

   上面是由列表序列构成的一维数组。

2.3.2  二维数组的创建

  二维数组的创建,其实在就是列表套列表或元组套元组。

In [14]: arr3 = np.array(((1,1,2,3),(5,8,13,21),(34,55,89,144)))

In [15]: arr3

Out[15]:

array([[  1,   1,   2,   3],

[  5,   8,  13,  21],

[ 34,  55,  89, 144]])

   上面使用元组套元组的方式。

In [16]: arr4 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

In [17]: arr4

Out[17]:

array([[ 1,  2,  3,  4],

[ 5,  6,  7,  8],

[ 9, 10, 11, 12]])

   上面使用列表套列表的方式。

  对于高维数组在将来的数据分析中用的比较少,这里关于高维数组的创建就不赘述了,构建方法仍然是套的方式。

   上面所介绍的都是人为设定的一维、二维或高维数组,numpy中也提供了几种特殊的数组,它们是:

In [18]: np.ones(3)  #返回一维元素全为1的数组

Out[18]: array([ 1.,  1.,  1.])

In [19]: np.ones([3,4])  #返回元素全为1的3×4二维数组

Out[19]:

array([[ 1.,  1.,  1.,  1.],

[ 1.,  1.,  1.,  1.],

[ 1.,  1.,  1.,  1.]])

 
In [20]: np.zeros(3) #返回一维元素全为0的数组

Out[20]: array([ 0.,  0.,  0.])

In [21]: np.zeros([3,4]) #返回元素全为0的3×4二维数组

Out[21]:

array([[ 0.,  0.,  0.,  0.],

[ 0.,  0.,  0.,  0.],

[ 0.,  0.,  0.,  0.]])

In [22]: np.empty(3) #返回一维空数组

Out[22]: array([ 0.,  0.,  0.])

In [23]: np.empty([3,4]) #返回3×4二维空数组

Out[23]:

array([[ 0.,  0.,  0.,  0.],

[ 0.,  0.,  0.,  0.],

[ 0.,  0.,  0.,  0.]])

 2.3.3  ones函数

  返回特定大小,以1填充的新数组

>>> import numpy as np
>>> a=np.ones(3);a
array([ 1.,  1.,  1.])
>>> b=np.ones((3,2));b
array([[ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.]])

 2.3.4  zeros函数

  返回特定大小,以0填充的新数组。

官方库的解释:

def zeros(shape, dtype=None, order=‘C‘): # real signature unknown; restored from __doc__
    """
    zeros(shape, dtype=float, order=‘C‘)
    
        Return a new array of given shape and type, filled with zeros.
    
        Parameters
        ----------
        shape : int or tuple of ints
            Shape of the new array, e.g., ``(2, 3)`` or ``2``.
        dtype : data-type, optional
            The desired data-type for the array, e.g., `numpy.int8`.  Default is
            `numpy.float64`.
        order : {‘C‘, ‘F‘}, optional, default: ‘C‘
            Whether to store multi-dimensional data in row-major
            (C-style) or column-major (Fortran-style) order in
            memory.
    
        Returns
        -------
        out : ndarray
            Array of zeros with the given shape, dtype, and order.
    
        See Also
        --------
        zeros_like : Return an array of zeros with shape and type of input.
        empty : Return a new uninitialized array.
        ones : Return a new array setting values to one.
        full : Return a new array of given shape filled with value.
    
        Examples
        --------
        >>> np.zeros(5)
        array([ 0.,  0.,  0.,  0.,  0.])
    
        >>> np.zeros((5,), dtype=int)
        array([0, 0, 0, 0, 0])
    
        >>> np.zeros((2, 1))
        array([[ 0.],
               [ 0.]])
    
        >>> s = (2,2)
        >>> np.zeros(s)
        array([[ 0.,  0.],
               [ 0.,  0.]])
    
        >>> np.zeros((2,), dtype=[(‘x‘, ‘i4‘), (‘y‘, ‘i4‘)]) # custom dtype
        array([(0, 0), (0, 0)],
              dtype=[(‘x‘, ‘<i4‘), (‘y‘, ‘<i4‘)])
    """
    pass

 

numpy.zeros(shape, dtype=float, order=’C’)

参数:

shape:int或ints序列
    新数组的形状,例如(2,3 )或2。
dtype:数据类型,可选
    数组的所需数据类型,例如numpy.int8。默认值为 numpy.float64。
order:{‘C‘,‘F‘},可选
是否在存储器中以C或Fortran连续(按行或列方式)存储多维数据。

 返回:

out:ndarray
    具有给定形状,数据类型和顺序的零数组。

 

>>> c=np.zeros(3)
>>> c
array([ 0.,  0.,  0.])
>>> d=np.zeros((2,3));d      
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.]]) 

#d=np.zeros(2,3)会报错,d=np.zeros(3,dtype=int)来改变默认的数据类型

 2.3.5  eye&identity函数

>>> e=np.eye(3);e
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])
>>> e=np.eye(3,2);e
array([[ 1.,  0.],
       [ 0.,  1.],
       [ 0.,  0.]])
>>> e=np.eye(3,1);e
array([[ 1.],
       [ 0.],
       [ 0.]])
>>> e=np.eye(3,3);e
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])
>>> e=np.eye(3,3,1);e
array([[ 0.,  1.,  0.],
       [ 0.,  0.,  1.],
       [ 0.,  0.,  0.]])
e=np.eye(3,3,2);e
array([[ 0.,  0.,  1.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> e=np.eye(3,3,3);e
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> e=np.eye(3,3,4);e
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> p=np.identity(4);p
array([[ 1.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  1.]])
>>> p=np.identity(4,3);p  #会报错
>>> p=np.identity((4,3));p  #会报错

 2.3.6 empty函数

  它创建指定形状和dtype的未初始化数组。它使用以下构造函数:

numpy.empty(shape, dtype = float, order = ‘C‘)

   注意:数组为随机值,因为他们未初始化。

import numpy as np
x = np.empty([3,2], dtype =  int)
print(x)
# [[1762    0]
#  [   0    0]
#  [   0    0]]

 

>>> a=np.empty(3);a
array([  1.60091154e-163,   1.12069303e-258,   3.23790862e-318])
>>> a=np.empty((3,3));a
array([[  1.57741456e-284,   1.57680914e-284,   1.56735002e-163],
       [  1.56205068e-163,   1.62511438e-163,   1.21880041e+171],
       [  1.57757869e-052,   7.34292780e+223,   4.71235856e+257]])

 2.3.7 ones_like  zero_like   empy_like函数

>>> a=np.array([[[1,2],[1,2]],[[1,2],[1,2]],[[1,2],[1,2]]])
>>> a.shape
(3, 2, 2)
>>> b=np.ones_like(a)
>>> b
array([[[1, 1],
        [1, 1]],

       [[1, 1],
        [1, 1]],

       [[1, 1],
        [1, 1]]])
>>> b=np.zeros_like(a);b
array([[[0, 0],
        [0, 0]],

       [[0, 0],
        [0, 0]],

       [[0, 0],
        [0, 0]]])
>>> a=np.array([[[1,2],[1,2]],[[1,2],[1,2]],[[1,2],[1,2]]])
>>> b=np.empty_like(a);b
array([[[39125057, 40012256],
        [81313824, 81313856]],

       [[       0,        0],
        [       0,        0]],

       [[       0,        0],
        [       0,        0]]])
#注意,shape和dtype均复制

 三,Numpy数据类型

  NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。

序号数据类型及描述
1. bool_存储为一个字节的布尔值(真或假)
2. int_默认整数,相当于 C 的long,通常为int32或int64
3. intc相当于 C 的int,通常为int32或int64
4. intp用于索引的整数,相当于 C 的size_t,通常为int32或int64
5. int8字节(-128 ~ 127)
6. int1616 位整数(-32768 ~ 32767)
7. int3232 位整数(-2147483648 ~ 2147483647)
8. int6464 位整数(-9223372036854775808 ~ 9223372036854775807)
9. uint88 位无符号整数(0 ~ 255)
10. uint1616 位无符号整数(0 ~ 65535)
11. uint3232 位无符号整数(0 ~ 4294967295)
12. uint6464 位无符号整数(0 ~ 18446744073709551615)
13. float_float64的简写
14. float16半精度浮点:符号位,5 位指数,10 位尾数
15. float32单精度浮点:符号位,8 位指数,23 位尾数
16. float64双精度浮点:符号位,11 位指数,52 位尾数
17. complex_complex128的简写
18. complex64复数,由两个 32 位浮点表示(实部和虚部)
19. complex128复数,由两个 64 位浮点表示(实部和虚部)

  NumPy 数字类型是dtype(数据类型)对象的实例,每个对象具有唯一的特征。 这些类型可以是np.bool_,np.float32等。

3.1 数据类型对象(dtype)

数据类型对象描述了对应于数组的固定内存块的解释,取决于以下方面:

  • 数据类型(整数、浮点或者 Python 对象)

  • 数据大小

  • 字节序(小端或大端)

  • 在结构化类型的情况下,字段的名称,每个字段的数据类型,和每个字段占用的内存块部分。

  • 如果数据类型是子序列,它的形状和数据类型。

  字节顺序取决于数据类型的前缀<或>。<意味着编码是小端(最小有效字节存储在最小地址中)。>意味着编码是大端(最大有效字节存储在最小地址中)。

dtype语法构造:

numpy.dtype(object, align, copy)

 参数为:

Object:被转换为数据类型的对象。 

Align:如果为true,则向字段添加间隔,使其类似 C 的结构体。 

Copy: 生成dtype对象的新副本,如果为flase,结果是内建数据类型对象的引用。

 示例:

# 使用数组标量类型
import numpy as np
dt = np.dtype(np.int32)
print(dt)
# int32

# int8,int16,int32,int64 可替换为等价的字符串 ‘i1‘,‘i2‘,‘i4‘,以及其他。
dt = np.dtype(‘i4‘)
print(dt)
# int32

# 使用端记号
dt = np.dtype(‘>i4‘)
print(dt)
# >i4

# 首先创建结构化数据类型。
dt = np.dtype([(‘age‘,np.int8)])
print(dt)
# [(‘age‘, ‘i1‘)]

# 现在将其应用于 ndarray 对象
dt = np.dtype([(‘age‘,np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print(a)
# [(10,) (20,) (30,)]

# 文件名称可用于访问 age 列的内容
dt = np.dtype([(‘age‘,np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print(a[‘age‘])
# [10 20 30]

四,Numpy 切片和索引

  ndarray对象的内容可以通过索引或切片来访问和修改,就像python的内置容器对象一样。

  nadarray 对象中的元素遵循基于零的索引,有三种可用的索引方法类型:字段访问,基础切片和高级索引。

  基本切片是Python中基本切片概念到n维的扩展,通过start,stop和step参数提供给内置函数的slice函数来构造一个Python slice对象,此slice对象被传递给数组来提取数组的一部分。

练习:

import numpy as np

a = np.arange(10)
print(a)
# [0 1 2 3 4 5 6 7 8 9]
s = slice(2,7,2)
print(s)
# slice(2, 7, 2)
print(a[s])
# [2 4 6]

b = a[2:7:2]
print(b)
# [2 4 6]

# 对单个元素进行切片
b = a[5]
print(b)
# 5

# 对始于索引的元素进行切片
print(a[2:])
# [2 3 4 5 6 7 8 9]

# 对索引之间的元素进行切片
print(a[2:5])
# [2 3 4]


# 二维数组
# 最开始的数组
import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print(‘我们的数组是:‘)
print(a)
print (‘
‘)
# 这会返回第二列元素的数组:
print (‘第二列的元素是:‘)
print(a[...,1])
print(‘
‘)
# 现在我们从第二行切片所有元素:
print (‘第二行的元素是:‘)
print(a[1,...])
print( ‘
‘)
# 现在我们从第二列向后切片所有元素:
print (‘第二列及其剩余元素是:‘)
print(a[...,1:])
‘‘‘
我们的数组是:
[[1 2 3]
 [3 4 5]
 [4 5 6]]


第二列的元素是:
[2 4 5]


第二行的元素是:
[3 4 5]


第二列及其剩余元素是:
[[2 3]
 [4 5]
 [5 6]]‘‘‘

 

五,Numpy-IO

  ndarray对象可以保存到磁盘文件并从磁盘文件加载,可用的IO功能有:

  •   load()和save() 函数处理Numpy 二进制文件(带npy扩展名)。
  •   loadtxt() 和savetxt() 函数处理正常的文本文件。

  Numpy为ndarray对象引入了一个简单的文件格式,这个npy文件在磁盘文件中,存储重建ndarray所需的数据,图形,dtype和其他信息,以便正确获取数组,即使该文件在具有不同架构的一台机器上。

numpy.save()

  此函数是讲文件输入数组存储在具有npy扩展名的磁盘文件中。

import numpy as np
a = np.array([1,2,3,4,5])
np.save(‘outfile‘,a)

 技术分享图片

  为了从outfile.npy重建数组,请使用load()函数。

import numpy as np
b = np.load(‘outfile.npy‘)
print(b)
# [1 2 3 4 5]

  save()和load()函数接受一个附加的布尔参数allow_pickles。Python中的pickle用在保存到磁盘文件或者从磁盘文件读取之前,对对象进行序列化和反序列化。

savetxt()

  以简单文本文件格式存储和获取数组数据,通过savetxt()和loadtxt()函数来完成的。

import numpy as np

a = np.array([1,2,3,4,5])
np.savetxt(‘out.txt‘,a)
b = np.loadtxt(‘out.txt‘)
print(b)
# [1. 2. 3. 4. 5.]

   savetxt()和loadtxt()函数接受附加的可选参数,例如页首,页尾和分隔符。

六,numpy中的ndarray与array的区别、不同

  答:Well, np.array is just a convenience function to create an ndarray, it is not a class itself.
(嗯,np.array只是一个便捷的函数,用来创建一个ndarray,它本身不是一个类)

  You can also create an array using np.ndarray, but it is not the recommended way. From the docstring of np.ndarray:
(你也能够用np.ndarray来创建,但这不是推荐的方式。来自np.ndarray的文档:)

 

 



以上是关于Python NumPy学习总结的主要内容,如果未能解决你的问题,请参考以下文章

Python NumPy学习总结

Python基础 | Numpy详细教程

python numpy片段

python的 numpy库学习总结和介绍(超详细)模块

numpy学习总结

学机器学习,不会数据分析怎么行?之NumPy详解