一、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'\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00'            >>> x.tobytes('C') == x.tobytes()            True            >>> x.tobytes('F')            b'\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00'        """        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'\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00'            >>> x.tobytes('C') == x.tobytes()            True            >>> x.tobytes('F')            b'\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00'        """        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_
10-12 11:58