美文网首页
numpy常用

numpy常用

作者: leobupt | 来源:发表于2017-11-12 15:11 被阅读0次

    1. 目的

    熟悉numpy进行数据处理

    2. 常用函数

    2.1 numpy.choose

    • 查看帮助
      numpy.choose目的是,从现有数组中,根据给定的下标, 生成新的数据
    def choose(a, choices, out=None, mode='raise')
    a : 表示下标
    choice : 函数根据a的下标从choice中选择数据
    
    • 实例理解
    import numpy as np
    y = np.array([0,1,3,2,4,5,6,7])
    # y = np.random.randint(0,10,10)
    # 数组[1, 2, 3]为被选择数据
    np.choose(y, [1, 2,3],mode='wrap')
    
    # 输出:
    In [33]: np.choose(y, [1, 2,3],mode='wrap')
    Out[33]: array([1, 2, 1, 3, 2, 3, 1, 2])
    
    In [35]: np.choose(y, [1, 2,3], mode='clip')
    Out[35]: array([1, 2, 3, 3, 3, 3, 3, 3])
    
    # 如果去掉mode参数,会报错, 因为y数组代表的下标,已经超过被选择的数组长度3
    In [35]: np.choose(y, [1, 2,3])
    ValueError: invalid entry in choice array
    

    2.2 numpy.ndindex

    • 查看帮助
      输出数组的下标
    • 实例理解
    in [38]: y2 = np.array([0, 1, 3, 2, 4, 5, 6, 7])
    Out[38]: array([0, 1, 3, 2, 4, 5, 6, 7])
    
    In [39]: for i in np.ndindex(y.shape):print i
    (0,)
    (1,)
    (2,)
    (3,)
    (4,)
    (5,)
    (6,)
    (7,)
    
    In [42]: y3 = np.random.randint(0,9,9).reshape(3,3)
    
    In [43]: y3
    Out[43]: 
    array([[2, 5, 6],
           [2, 1, 7],
           [2, 3, 6]])
    
    In [44]: for i in np.ndindex(y3.shape):print i
    (0, 0)
    (0, 1)
    (0, 2)
    (1, 0)
    (1, 1)
    (1, 2)
    (2, 0)
    (2, 1)
    (2, 2)
    
    
    

    2.3 reshape

    • 数据维度变化
    • 实例
    >>> arr = np.arange(0, 8, 1)
    array([0, 1, 2, 3, 4, 5, 6, 7])
    >>> arr.reshape((2, 4))
    array([[0, 1, 2, 3],
           [4, 5, 6, 7]])
    
    # 同样:已知数组元素格式, 可以仅指定列维度数,行为度缺省为-1, 同样可以转化成功
    >>> arr.reshape((-1, 4))  
    array([[0, 1, 2, 3],
           [4, 5, 6, 7]])
    
    # 同样, 已知数组元素格式, 可以仅指定行维度数,列为度缺省为-1, 同样可以转化成功
    >>> arr.reshape((2, -1))  
    array([[0, 1, 2, 3],
           [4, 5, 6, 7]])
    
    # 备注: -1表示函数会根据另外一个维度值和元素数,自动计算并匹配该维度
    

    2.4 numpy.squeeze

    • 把numpy.narray中维度等于1的去掉
    • 实例
    # x.shape = (1, 3, 1)
    # x.squeeze().shape() = (3,)  
    # 即: 去掉shape中的两个1, 具体实例如下:
    >>> x = np.array([[[0], [1], [2]]])
    >>> x
    array([[[0],
            [1],
            [2]]])
    >>> x.shape
    (1, 3, 1)
    
    # 下面执行squeeze函数
    >>> x.squeeze()
    array([0, 1, 2])
    >>> x.squeeze().shape
    (3,)
    
    
    # 实例2 
    >>> x1 = [[1,2,3,4],[2,3,4,5]]
    >>> x2 = numpy.array([x1])
    >>> x2.shape
    (1, 2, 4)
    
    # 执行squeeze函数,观察shape变化
    >>> x3 = x2.squeeze()
    >>> x3.shape
    (2, 4)
    
    

    2.5 np.random.seed(0)

    • 使得random函数产生的随机数不变
    • 实例
    # 注意: 必须每次调用np.random之前注册随机种子,以确保每次产生随机值相同
    In [15]: np.random.seed(0); print np.random.rand(4);
    [ 0.5488135   0.71518937  0.60276338  0.54488318]
    
    In [16]: np.random.seed(0); print np.random.rand(4);
    [ 0.5488135   0.71518937  0.60276338  0.54488318]
    
    

    2.5 np.linspace

    • 创建线性等差数组
    • 实例
    >>> np.linspace(0,10,5)
    array([  0. ,   2.5,   5. ,   7.5,  10. ])
    # 绘图,更直观
    >>> import matplotlib.pyplot as plt
    >>> plt.plot(np.linspace(0,10,5))
    >>> plt.show()
    
    linspace函数产生直线

    2.6 np.searchsorted(arr, data)

    • 按照数组arr内元素顺序,将data划分类N类,N=len(arr)
    • 实例
    # 划分标准数组
    >>> arr = np.arange(0, 5, 1)
    array([0, 1, 2, 3, 4])
    # arr = np.linspace(0, 10, 5)
    
    # 被划分数组
    >>> data = np.array([1.1, 3.5, 4.9, 5.1, 0])
    >>> np.searchsorted(arr, data)
    array([2, 4, 5, 5, 0])
    # 2代表: 1-2区间; 4代表: 3-4区间
    # 即: data 数据的值,被映射到数组arr创建的区间内
    

    2.7 np.ravel(order='C')

    • 将多维数组打平,变成一维数组
    • order = 'C' 顺序从左到右,从上到下进行flatten
    • order = 'F','A','K'自己修改看变化
    • 实例
    >>> arr = np.arange(0,27,1).reshape((3,3,3))
    >>> arr
    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],
            [24, 25, 26]]])
    >>> arr.ravel()
    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, 24, 25, 26])
    

    2.8 array[::]用法

    • 了解numpy.array的切片
    • 实例
    import numpy as np
    arr = np.arange(0, 10, 1)
    Out[48]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    def f(begin, step):
        arr[begin::step]
    # begin是数组起始的下标位置, 缺省默认为从0开始
    # step为移动的步伐,如为正数,表示起始位置从左到右,负数则起始位置从右到左,缺省值为1
    # 举例:
    In [49]: arr[3::1]
    Out[49]: array([3, 4, 5, 6, 7, 8, 9])
    In [50]: arr[3::2]
    Out[50]: array([3, 5, 7, 9])
    In [51]: arr[3::-1]
    Out[51]: array([3, 2, 1, 0])
    In [52]: arr[3::-2]
    Out[52]: array([3, 1])
    

    2.9 np.c_ 与 np.r_

    • 实例
    In [57]: s1
    Out[57]: array([1, 2, 3, 4])
    In [58]: s2
    Out[58]: array([1, 2, 3, 4])
    In [62]: np.c_[s1, s2]
    Out[62]: 
    array([[1, 1],
           [2, 2],
           [3, 3],
           [4, 4]])
    In [63]: np.r_[s1, s2]
    Out[63]: array([1, 2, 3, 4, 1, 2, 3, 4])
    In [64]: s3
    Out[64]: [1, 2, 3, 4, 1, 2, 3, 4]
    In [65]: np.r_[s1, s2, s3]
    Out[65]: array([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4])
    
    

    2.10 np.meshgrid

    • 实例
        >>> nx, ny = (3, 2)
        >>> x = np.linspace(0, 1, nx)
        >>> y = np.linspace(0, 1, ny)
        >>> xv, yv = np.meshgrid(x, y)
        >>> xv
        array([[ 0. ,  0.5,  1. ],
               [ 0. ,  0.5,  1. ]])
        >>> yv
        array([[ 0.,  0.,  0.],
               [ 1.,  1.,  1.]])
        >>> xv, yv = np.meshgrid(x, y, sparse=True)  # make sparse output arrays
        >>> xv
        array([[ 0. ,  0.5,  1. ]])
        >>> yv
        array([[ 0.],
               [ 1.]])
    

    2.11 hstack与vstack

    • hstack即:两侧,每个子元素水平元素相加
    • vstack即:两侧,每个子元素垂直元素相加
    • 实例:
    # 顺便说下newaxis功能, 即:将子元素增加一维度
    # (2,) => (2,1)  (2,3)=>(2,1,3)
    from numpy import newaxis
    In [44]: a1 = np.array([1,2])
    
    In [45]: b1 = np.array([10,20])
    
    In [46]: a1[:,newaxis]
    Out[46]: 
    array([[1],
           [2]])
    In [48]: np.vstack((a1[:,newaxis], b1[:, newaxis]))
    Out[48]: 
    array([[ 1],
           [ 2],
           [10],
           [20]])
    In [58]: np.hstack((a1[:,newaxis], b1[:, newaxis]))
    Out[58]: 
    array([[ 1, 10],
           [ 2, 20]])
    
    

    相关文章

      网友评论

          本文标题:numpy常用

          本文链接:https://www.haomeiwen.com/subject/lgqvmxtx.html