暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

NumPy的应用--广播、分段函数、计算唯一值及出现次数、计算加权平均值、矩阵运算

糟老头修炼记 2020-02-06
371

11.广播

    >>> a = np.arange(0,60,10).reshape(-1,1)     # 列向量
    >>> b = np.arange(0,6) # 行向量
    >>> a
    array([[ 0],
    [10],
    [20],
    [30],
    [40],
    [50]])
    >>> b
    array([0, 1, 2, 3, 4, 5])
    >>> a[0] + b # 数组与标量的加法
    array([0, 1, 2, 3, 4, 5])
    >>> a[1] + b
    array([10, 11, 12, 13, 14, 15])








    >>> a + b # 广播
    array([[ 0, 1, 2, 3, 4, 5],
    [10, 11, 12, 13, 14, 15],
    [20, 21, 22, 23, 24, 25],
    [30, 31, 32, 33, 34, 35],
    [40, 41, 42, 43, 44, 45],
    [50, 51, 52, 53, 54, 55]])
    >>> a * b
    array([[ 0, 0, 0, 0, 0, 0],
    [ 0, 10, 20, 30, 40, 50],
    [ 0, 20, 40, 60, 80, 100],
    [ 0, 30, 60, 90, 120, 150],
    [ 0, 40, 80, 120, 160, 200],
    [ 0, 50, 100, 150, 200, 250]])





    12.分段函数

      >>> x = np.random.randint(0, 10, size=(1,10))
      >>> x
      array([[0, 4, 3, 3, 8, 4, 7, 3, 1, 7]])
      >>> np.where(x<5, 0, 1) # 小于5的元素值对应0,其他对应1
      array([[0, 0, 0, 0, 1, 0, 1, 0, 0, 1]])
      >>> np.piecewise(x, [x<4, x>7], [lambda x:x*2, lambda x:x*3])
      # 小于4的元素乘以2
      # 大于7的元素乘以3
      # 其他元素变为0
      array([[ 0, 0, 6, 6, 24, 0, 0, 6, 2, 0]])





      13.计算唯一值及出现次数

        >>> x = np.random.randint(0, 10, 7)
        >>> x
        array([8, 7, 7, 5, 3, 8, 0])
        >>> np.bincount(x) # 元素出现次数,0出现1次,
        # 1、2没出现,3出现1次,以此类推
        array([1, 0, 0, 1, 0, 1, 0, 2, 2], dtype=int64)
        >>> np.sum(_) # 所有元素出现次数之和等于数组长度
        7
        >>> len(x)
        7
        >>> np.unique(x) # 返回唯一元素值
        array([0, 3, 5, 7, 8])








        >>> x = np.random.randint(0,10,2)
        >>> x
        array([2, 1])
        >>> np.bincount(x) # 结果数组的长度取决于原始数组中最大元素值
        array([0, 1, 1], dtype=int64)
        >>> x = np.random.randint(0, 10, 10)
        >>> x
        array([3, 6, 4, 5, 2, 9, 7, 0, 9, 0])
        >>> y = np.random.rand(10) # 随机小数,模拟权重
        >>> y = np.round_(y, 1) # 保留一位小数
        >>> y
        array([ 0.6, 0.8, 0.8, 0. , 0.6, 0.1, 0. , 0.2, 0.8, 0.7])
        >>> np.sum(x*y)/np.sum(np.bincount(x)) # 加权总和/出现总次数或元素个数
        2.9199999999999999
        >>> sum(x*y)/len(x) # 数组支持Python内置函数
        2.9199999999999999









        14.计算加权平均值

          >>> x=np.random.randint(0,10,10)
          >>> x
          array([7,8,5,8,0,7,6,5,6,9])
          >>> y=np.array([round(i,1) for i in list(np.random.random(10))])
          >>> y
          array([0.6,0.8,0.8,0.,0.6,0.1,0.,0.3,0.8,0.7])


          >>> np.sum(x*y)/np.sum(np.bincount(x))

          15.矩阵运算

            >>> a_list = [3, 5, 7]
            >>> a_mat = np.matrix(a_list) # 创建矩阵
            >>> a_mat
            matrix([[3, 5, 7]])
            >>> a_mat.T # 矩阵转置
            matrix([[3],
            [5],
            [7]])
            >>> a_mat.shape # 矩阵形状
            (1, 3)
            >>> a_mat.size # 元素个数
            3




            >>> a_mat.mean() # 元素平均值
            5.0
            >>> a_mat.sum() # 所有元素之和
            15
            >>> a_mat.max() # 最大值
            7
            >>> a_mat.max(axis=1) # 横向最大值
            matrix([[7]])
            >>> a_mat.max(axis=0) # 纵向最大值
            matrix([[3, 5, 7]])
            >>> b_mat = np.matrix((1, 2, 3)) # 创建矩阵
            >>> b_mat
            matrix([[1, 2, 3]])
            >>> a_mat * b_mat.T # 矩阵相乘
            matrix([[34]])








            >>> c_mat = np.matrix([[1, 5, 3], [2, 9, 6]]) # 创建二维矩阵
            >>> c_mat
            matrix([[1, 5, 3],
            [2, 9, 6]])
            >>> c_mat.argsort(axis=0) # 纵向排序后的元素序号
            matrix([[0, 0, 0],
            [1, 1, 1]], dtype=int64)
            >>> c_mat.argsort(axis=1) # 横向排序后的元素序号
            matrix([[0, 2, 1],
            [0, 2, 1]], dtype=int64)
            >>> d_mat = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
            >>> d_mat.diagonal() # 矩阵对角线元素
            matrix([[1, 5, 9]])
            >>> d_mat.flatten() # 矩阵平铺,行优先
            matrix([[1, 2, 3, 4, 5, 6, 7, 8, 9]])
            >>> d_mat.flatten('F') # 矩阵平铺,列优先
            matrix([[1, 4, 7, 2, 5, 8, 3, 6, 9]])












            计算相关系数矩阵(对称矩阵,对角线上元素表示自相关系数)
            >>> np.corrcoef([1,2,3,4], [4,3,2,1]) #负相关,变化方向相反
            array([[ 1., -1.],
            [-1., 1.]])
            >>> np.corrcoef([1,2,3,4], [1,2,3,4]) #正相关,变化方向一致
            array([[ 1., 1.],
            [ 1., 1.]])
            >>> np.corrcoef([1,2,3,4], [1,2,3,40])#正相关,变化趋势接近
            array([[ 1. , 0.8010362],
            [ 0.8010362, 1. ]])





            文章转载自糟老头修炼记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论