zoukankan      html  css  js  c++  java
  • 数据分析之Numpy的基本操作

    Numpy

    • NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

    1 创建 ndarray

    1. 使用np.array()创建

      import numpy as np
      # 一维数据创建
      ret = np.array([1, 2, 3])
      # 二维数据创建
      ret = np.array([[1, 2, 3], [4, 5, 6]])
      print(ret)
      
      • numpy默认ndarray的所有元素的类型是相同的

      • 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int

      • 使用matplotlib.pyplot获取一个numpy数组,数据来源于一张图片

        import matplotlib.pylab as plt
        # 图片数据转化为数组
        img_arr = plt.imread('./cat.jpg')
        # 数组转图片
        img_show = plt.imshow(img_arr)
        # 操作该numpy数据,该操作会同步到图片中
        plt.imshow(img_arr-100)
        
    2. 使用np的routines函数创建

      • np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 等差数列

        np.linspace(0,100,num=20)
        
      • np.arange([start, ]stop, [step, ]dtype=None)

        np.arange(0,100,2)
        
      • np.random.randint(low, high=None, size=None, dtype='l') 随机生成

        np.random.seed(100) #固定随机性#随机因子:系统的时间
        arr = np.random.randint(0,100,size=(4,5)) #size 4行5列
        
      • np.random.random(size=None)

        生成0到1的随机数,左闭右开 np.random.seed(3)

        np.random.random(size=(4,5))  # 4行5列
        

    2 ndarray的属性

    • 4个必记参数: ndim:维度 shape:形状(各维度的长度) size:总长度

    • dtype:元素类型

      arr = np.random.randint(0, 100, size=(4, 5))
      arr.ndim
      arr.shape
      ...
      

    3 ndarray的基本操作

    • 索引

      • 一维与列表完全一致 多维时同理
    • 切片

      • 一维与列表完全一致 多维时同理
      np.random.seed(100)  # 固定随机性#随机因子:系统的时间
      arr = np.random.randint(0, 100, size=(4, 5))
      #获取二维数组前两行
      arr[0:2]
      #获取二维数组前两列
      arr[:,0:2]
      # 获取二维数组前两行和前两列数据
      arr[0:2,0:2]
      # 将数组的行倒序
      arr[::-1]
      #列倒序
      arr[:,::-1]
      #全部倒序
      arr[::-1,::-1]
      # 图片倒置,裁剪
      plt.imshow(img_arr[:,::-1,:])
      
    • 变形

      • 使用arr.reshape()函数,注意参数是一个tuple!

      • 将一维数组变形成多维数组 arr_1.reshape((2,10))

        arr_1 = np.random.randint(0, 100, size=(1,20))
        print(arr_1)
        print(arr_1.reshape((2, 10)))
        '''[[ 9 93 86  2 27  4 31  1 13 83  4 91 59 67  7 49 47 65 61 14]]
        [[ 9 93 86  2 27  4 31  1 13 83]
         [ 4 91 59 67  7 49 47 65 61 14]]
        '''
        
      • 将多维数组变形成一维数组 arr.reshape((20,))

    • 级联

      • np.concatenate()

      • 一维,二维,多维数组的级联,实际操作中级联多为二维数组

      • np.concatenate((arr,arr,arr),axis=1)

        array([[ 8, 24, 67, 87, 79],
               [48, 10, 94, 52, 98],
               [53, 66, 98, 14, 34],
               [24, 15, 60, 58, 16]])
        np.concatenate((arr,arr,arr),axis=1)
        array([[ 8, 24, 67, 87, 79,  8, 24, 67, 87, 79,  8, 24, 67, 87, 79],
               [48, 10, 94, 52, 98, 48, 10, 94, 52, 98, 48, 10, 94, 52, 98],
               [53, 66, 98, 14, 34, 53, 66, 98, 14, 34, 53, 66, 98, 14, 34],
               [24, 15, 60, 58, 16, 24, 15, 60, 58, 16, 24, 15, 60, 58, 16]])
        
      • 应用,合并参数一致的图片

        img_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1)
        img_9 = np.concatenate((img_3,img_3,img_3),axis=0)
        plt.imshow(img_9)
        
      • 级联的参数是列表:一定要加中括号或小括号

      • 维度必须相同

      • 形状相符:在维度保持一致的前提下,如果进行横向(axis=1)级联,必须保证进行级联的数组行数保持一致。如果进行纵向(axis=0)级联,必须保证进行级联的数组列数保持一致。

      • 可通过axis参数改变级联的方向

    4 ndarray的聚合操作

    • 求和np.sum

      arr.sum(axis=1)  # 横向(axis=1)级联,纵向(axis=0)级联
      
    • 最大最小值:np.max/ np.min

    • 平均值:np.mean()

    • 其他聚合操作

    5 ndarray 的排序

    p.sort()与ndarray.sort()都可以,但有区别:

    • np.sort()不改变输入
    • ndarray.sort()本地处理,不占用空间,但改变输入
    np.sort(arr,axis=0)
    
  • 相关阅读:
    设置发光字
    QQ空间无导航条应对方法
    网页设计经典网站欣赏
    页面居中显示
    获取元素的绝对位置
    输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
    最长重复子字符串
    从头到尾彻底解析Hash 表算法
    求二叉树中节点的最大距离
    MySQL学习笔记——显示数据库信息
  • 原文地址:https://www.cnblogs.com/bigox/p/11460455.html
Copyright © 2011-2022 走看看