zoukankan      html  css  js  c++  java
  • 数据分析--NumPy的基本用法

    一、NumPy简介和安装

    二、NumPy型数组--ndarray简介

    三、NumPy型数组--ndarray的应用

    四、NumPy型数组--ndarray数据类型

    五、NumPy型数组--ndarray数据类型(NaN,INF)

    六、NumPy型数组--ndarray的创建

    6.1一维数组的创建

    6.2多维数组的创建

    七、NumPy型数组--ndarray的属性

    八、NumPy型数组--ndarray运算(加减乘除)

    九、NumPy型数组--ndarray运算(函数)

    十、NumPy型数组--ndarray筛选数据

    10.1通过索引筛选数据

    10.2 通过切片筛选数据


     

    一、NumPy简介和安装

    NumPy是高性能科学计算和数据分析的基础包,是pandas等其他各种工具的基础

    安装方法:
    pip3 install numpy
    引用方式:
    import numpy as np

    二、NumPy型数组--ndarray简介

    之前python中学过的类似数组类型有:列表,元祖

    而在NumPy中,有专门的数组类型叫ndarray,可以由列表,元祖转换而成。

    ndarray,一个多维数组结构,高效且节省空间
    无需循环对数组数据进行快速运算的数学函数
    线性代数、随机数生成和傅里叶变换功能

    三、NumPy型数组--ndarray的应用

    例如:已知若干家跨国公司的市值(美元),将其转换为人民币

    a = [ramdom.uniform(1000.0, 2000.0), for i in range(50)]
    dic = 6.8
    a=np.array(a)
    a*dic //得出结果


    例如:已知购物车的商品价格和商品数量求商品总金额
    price = [ramdom.uniform(100.0, 200.0), for i in range(50)]
    quantity=[ramdom.randint(1,10), for i in range(50)]
    price=np.array(price)
    quantity=np.array(quantity)
    price*quantity //每个商品总价 每一项分别相乘
    price*quantity.sum() //所有商品总价

    四、NumPy型数组--ndarray数据类型

    数组对象内元素类型必须相同,数组大小不可更改

    布尔型:bool_

    字符型: str
    整型:int_ int8 int16 int32 int64 //数字表示位
    无符号整型:uint8 uint16 uint32 uint64 //只表示0和正数
    浮点:float_ float16 float32 float64
    复数:complex_ complex64 complex128

    五、NumPy型数组--ndarray数据类型(NaN,INF)

    NAN:不是数字,不等于任何浮点数,也不等于自己 ,例如:0/0 sqrt(-1)
    INF:无限大的float,比任何浮点数都大 np.inf==np.inf为真  例如: 5/0
    怎样判断结果集b里有没有NAN?[nan,1.]
    np.isnan(b) [True,False] # 判断有没有NAN
    b[~(np.isnan(b))] # 删除NAN

    怎样过滤c中的INF?
    c[c!=np.inf] 或 c[np.isinf(c)]

    六、NumPy型数组--ndarray的创建

    读取文件:

    numpy.genfromtxt("word.txt", delimiter=",",  dtype=str,  skip_header=1)

    6.1一维数组的创建

    np.array([1,2,3,4,5])

    np.array( [ramdom.uniform(100.0, 200.0), for i in range(50)] )  //由列表生成式转换,产生50个100-200之间的随机浮点数

    np.array(range(20))    //由迭代器转换

    np.zeros(10,dtype=np.int32)  //10个0,默认是float

    np.zeros( (3,4) )  //3行4列的零
    np.ones(10)         //10个1,默认是float
    a=np.empty(100)   //随机值,之前内存的残值。要确认以后会赋值就用这个
    np.arange(2,100,3)  //起始值,结束值,步长,步长可为小数
    np.linspace(0,100,101)   //[起始值,结束值],个数。等差数列

    NumPy随机数生成:
    np.random.randint(0, 10, 30) #生成30个0~10范围的数
    np.random.randint(0, 10, (3,5,6)) # 生成三维数组(3,5,6)
    np.random.rand(10) # 返回10个0~1的数
    np.random.choice([1,2,3,4,5], 10) # 返回列表中的数,共10个
    np.random.uniform(2.0, 4.0, 10) # 返回10个2.0~4.0的浮点数,平均分布

    6.2多维数组的创建

    np.arange(15),reshape((3,5))   //15个数变成3行5列的二维数组

    np.array([ [1,2,3], [4,5,6] ])     //二维数组"一张纸"
    np.array([ [ [1,2,3], [4,5,6],[3,2,1],[6,5,4] ] , [ [1,2,3], [4,5,6],[3,2,1],[6,5,4] ] ])   //三维数组"一个本"

    七、NumPy型数组--ndarray的属性

    a = np.array(range(20))

    1、a.dtype    //查看存的数据的类型
    2、a.size     //查看数组元素个数
    3、a.shape   //返回行列数:一维返回(列数,) 二维返回(行数,列数),三维返回(厚度,行数,列数)
    4、a.T         //行转列
    5、a.ndim   //查看维数

    6、数据类型转换: a.astype( float )

    八、NumPy型数组--ndarray运算(加减乘除)

    向量:ndarray
    标量:1,2,3,4等

    ndarray可以和标量运算: +-*/><
    ndarray可以和ndarray运算(长度一样才行):+-*/><

    九、NumPy型数组--ndarray运算(函数)

    能同时对数组中所有元素进行运算
    通用函数:
    np.abs
    np.sqrt
    np.ceil 向上取整
    np.floor 向下取整
    np.round<==>np.rint 向外取整
    np.trunc 向0取整
    np.modf x,y=np.modf(a) x是小数部分,y是整数部分
    多维数组转一维数组:a.reval()

    一维数组转多维数组(6行2列):a.shape=(6,2)

    np.vstack( (a,b) )  # a,b拼接,a,b的列数必须一样,纵向拉长

    np.hstack(a,b)  # a,b拼接,a,b的行数必须一样,横向拉长

    np.hsplit(a,3)  # 按列切分隔3列切一刀,上面的逆操作

    np.hsplit(a, (3,4) )  # 按列切分, (3,4)处切一刀

    np.vsplit...   # 同理 ,按行切分

    二元函数:
    np.maximum(a, b) # 一一对应取出最大的
    np.minmum(a, b) # 一一对应取出最小的

    求和:axis=0/1 按行或列求
    a.sum(axis=0/1) # 对a中所有的求和
    a.mean(axis=0/1) # 求平均值
    a.var(axis=0/1) # 求方差 表示数据的离散程度,越高表示离散程度越高
    a.std() # 求标准差。通过方差开方得到。
    a.min(axis=0/1) # 返回最小值
    a.max(axis=0/1) # 返回最大值
    a.argmax(axis=0/1) # 返回最大值的下标
    a.argmin(axis=0/1) # 返回最小值的下标

    十、NumPy型数组--ndarray筛选数据

    10.1通过索引筛选数据

    ndarray普通索引:
      一维数组: a[0] a[1] a[2]
      二维数组:a[0][0]  a[0,0] 推荐第二种

    ndarray布尔型索引:逻辑或/与

      例如:给一个数组,选出数组中所有大于5的数
        a=np.arange(10)
        a[a>5]
        原理://先执行a>5得到布尔数组,
        //布尔索引:把同样大小的布尔数组传进索引,这样把a里对应为True的返回

      例如:选出数组中大于5的偶数
        a[(a>5) & (a%2==0)] //用&要加括号,不加报错
        a[(a>5) | (a%2==0)] //逻辑或

    ndarray花式索引:
      a = np.arange(20)
      例如:取出1,3,4,6,7位置的值
         b=[1,3,4,6,7]
         a[b]

    10.2 通过切片筛选数据

    ndarray切片 和 普通列表切片有什么不同?
    ndarray切片默认是原数组的引用,修改切片会导致原数组修改
    除非使用:a[0:4].copy()才复制一份


    一维数组切片:
    a[0:4:2] //开始位置,结束位置,步长

    二维数组切片:
    例如a=np.array([ [1,2,3], [4,5,6] ])
    切1,2,4,5逗号左边是行右边是列
    a[0:2,0:2]
    二维数组
    a[0, : ]  第一行切片
    a[0: a[0]>2] 第一行大于2的
    a[[1,3],:][:,[1,3]] 取1,3行中的1,3列

      

  • 相关阅读:
    二维码物流方面的应用与用户体验方面的改进
    css3文本字体
    css文本样式及控制文本的大小写
    css基础知识之列表
    css基础知识之属性选择器
    css基础内容之background
    webstorm常用快捷键
    canvas标签的使用
    HTML格式化
    a标签链接到当前页内指定位置
  • 原文地址:https://www.cnblogs.com/staff/p/10770242.html
Copyright © 2011-2022 走看看