zoukankan      html  css  js  c++  java
  • numpy

    1. matplotlib ->绘图
    2. numpy -> 处理数值型数组
    3. pandas -> 处理字符串, 时间序列、字典等

    二、numpy 学习

    ​ 一个在python中做科学计算的基础库,重在数值计算, 也在大部分python科学计算库的基础库, 多用于大型、多维数组上执行数值运算。

    1.安装

    pip install numpy

    2.创建数据(矩阵)

    import numpy as np
    
    t1 = np.array([1,2,3])
    print(t1)
    print(type(t1))
    
    t2 = np.array(range(10))
    print(t2)
    
    t3 = np.arange(4, 10, 2) # 和range 类似,不同的是生成的数据类型
    print(t3)
    print(t3.dtype) # 查看存储类型, int32
    

    结果:

    [1 2 3]
    <class 'numpy.ndarray'>
    [0 1 2 3 4 5 6 7 8 9]  
    [4 6 8]
    int32
    

    常用数据类型

    3.数据类型操作

    ​ 3.1 指定数据类型

    ​ 注意 bool 类型会将其转换为 True False

    t4 = np.array(range(1,4), dtype="i1")
    

    ​ 3.2 调整数据类型

    t5 = t4.astype("int8")
    

    ​ 3.3 保留小数为

    t8 = np.round([1.112,0.333,0.567], 2)
    
    --------结果
    [1.11 0.33 0.57] # 四舍五入
    

    4.数组的形状 几行几列 shape

    t4 = np.array([1,2,3,4,5,6,7,8,9])
    print(t4)
    print(t4.shape)
    t5 = np.array(([1,2,3],[4,5,6],[7,8,9]))
    print(t5)
    print(t5.shape)
    

    结果:

    [1 2 3 4 5 6 7 8 9]
    (9,) 这个代表只有一行9列
    
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    
    (3, 3) 三行三列
    

    5. reshape 转换为几行几列(不改变源值)

    t4 = np.array([1,2,3,4,5,6,7,8,9])
    t5 = t4.reshape(3,3)
    print(t4.reshape(3,3))
    

    结果

    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    
    print(t5.reshape(9,)) # 转换为1维
    print(t5.flatten()) # 直接转换为1行
    

    6.运算

    广播原则:

    ​ 如果两个数组的后缘维度(从末尾开始计算的维度)轴长度相符或其中一方的长度为1,则认为他们是广播兼容的。广播会在缺失或长度为1的维度上进行。

    6.1 加减乘除数字运算:

    ​ t5 + 2

    广播机制, 在运算的时候对数组里的所有的值都进行计算

    结果:
    [[ 3  4  5]
     [ 6  7  8]
     [ 9 10 11]]
    

    6.2 数组与数组进行运算

    • 行列位数相同的时候: 对应位置进行运算

    • 列位数相同的时候: 每一行会与其对应位置计算

      t6 = np.array([3,3,3])
      t5 - t6
      t5 为 array([[1, 2, 3],
             [4, 5, 6],
             [7, 8, 9]])
      
      结果:
      array([[-2, -1,  0],
             [ 1,  2,  3],
             [ 4,  5,  6]])
      
    • 行位数相同的时候: 每一列会与其对应位置计算

    In [26]: t5
    Out[26]:
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    
    In [27]: t6 = np.array([[3],[3],[3]])
    In [28]: t5 -t6
    Out[28]:
    array([[-2, -1,  0],
           [ 1,  2,  3],
           [ 4,  5,  6]])
    In [29]: t6
    Out[29]:
    array([[3],
           [3],
           [3]])
    
    • 行列都不相同的时候:不能进行计算

    7.轴

    7.1 概念

    0,1,2标识

    一维: 0 标识行

    二维:0 标识行 ,1 标识列

    三维:0 标识行, 1 标识列, 2 标识 z 轴

    shape 的结果是(2,0,1)->(z, x, y)

    7.2平均值

    二位数组求平均值,需要指明哪个方向的

    8 读取数据

    numpy.loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes', max_rows=None)
    
    

    参数解释:

    ​ fname : 文件路径可以是 .gz 或bz2 压缩文件

    ​ dtype : 指定读出结果的类型

    ​ delimiter : 分隔字符串(你文件中分割数据的字符), 默认为空格

    ​ skiprows : 跳过前x行,一般跳过第一行表头

    ​ usecols : 使用那几列, 索引, 元组类型

    ​ encoding : 打开的字符编码

    ​ unpack : 如果为True, 读入属性将分别写入不同数组变量, False 读入数据只写一个数组变量,默认为False(行变列,列变行)

    us_file_path = "./data/1.csv" # 1.csv 的内容在最下边有
    t1 = np.loadtxt(us_file_path, delimiter=",", skiprows=1, encoding="utf-8", usecols=[1,2,3], unpack=True) # 因为其他列不是数字,所以只取这几列的东西。
    t2 = np.loadtxt(us_file_path, delimiter=",", skiprows=1, encoding="utf-8", usecols=[1,2,3])
    print(t1)
    print(t2)
    

    结果:

    [[0.4  0.7  0.6  0.8  0.7  1.   1.5  1.6  2.6  4.   1.2  2.6  1.4  1.4
      0.6  0.7  0.8  0.9  3.5  1.7 ]
     [0.5  0.75 0.75 0.9  1.   1.4  1.75 1.9  2.9  5.5  1.7  3.7  1.95 1.85
      0.8  0.95 1.   1.15 3.75 1.95]
     [0.6  0.8  0.9  1.   1.3  1.8  2.   2.2  3.2  7.   2.2  4.8  2.5  2.3
      1.   1.2  1.2  1.4  4.   2.2 ]]
    
    [[0.4  0.5  0.6 ]
     [0.7  0.75 0.8 ]
     [0.6  0.75 0.9 ]
     [0.8  0.9  1.  ]
     [0.7  1.   1.3 ]
     [1.   1.4  1.8 ]
     [1.5  1.75 2.  ]
     [1.6  1.9  2.2 ]
     [2.6  2.9  3.2 ]
     [4.   5.5  7.  ]
     [1.2  1.7  2.2 ]
     [2.6  3.7  4.8 ]
     [1.4  1.95 2.5 ]
     [1.4  1.85 2.3 ]
     [0.6  0.8  1.  ]
     [0.7  0.95 1.2 ]
     [0.8  1.   1.2 ]
     [0.9  1.15 1.4 ]
     [3.5  3.75 4.  ]
     [1.7  1.95 2.2 ]]
    

    9 转置

    t.T 
    t.transponse()
    t.swapaxes(1,0) # 交换轴
    

    10 numpy 的索引和切片

    面对问题只想取某一行某一列的问题。

    t2[2] # 取第2行, 行数从0开始
    t2[2::] # 从第二行开始取
    t2[[2,8,10]] # 取第2,8,10 行
    取列
    t2[1,:] # 取一行的所有列
    t2[2:,:] # 取二行后的所有列
    t2[:,0]	# 取第一列
    t2[:,2:] # 取所有行的第二列之后的所有列 连续
    t2[:, [0,2]] # 取所有行的第0列和第2列
    t2[3:6,0:3] # 取第三行到第6行,第6行取不到, 0列到3列第三列取不到	
    print(t2[[3,7],[0,2]]) # 只能取到对应位置的点 [0.8 2.2] 就是点(3,0)和点(7,2)的值
    
    
    

    11 numpy修改值

    ​ 取到值直接修改

    11.1简单修改

    t2[2,:] = 0
    

    11.2 布尔修改

    修改所有小于1的为3

    t2[t2<1] = 3
    

    因为 t2<3 每个位置返回的是True和False, t2[t2<1] = 3的意思的将所有为True的替换成3

    11.3 多条件修改

    np.where(t2<1,0,10) # 将小于1的替换成0,其他的替换成10
    t2.clip(1, 2) # 把小于1的替换成1, 大于2的替换成2
    

    12 数组拼接

    np.vstack((t1,t2)) # 竖直拼接 t1在上 t2在下
    np.hstack((t1,t2)) # 水平拼接
    

    13 数组的行列交换

    t2[[1,2],:] = t2[[2,1],:] # 行交换, 把1,2 行交换
    t2[:,[1,2]] = t2[:,[2,1]] # 列交换
    

    14 方法扩展

    np.zeros((3,4)) # 生成一个三行四列全为0的数据
    np.ones((3,4)) # 生成一个三行四列全为1的数组
    np.eye(3) # 生成一个对角线为1的方阵, 边长为3
    np.argmax(t2, axis=0) # t2 每一列的最大值
    # 结果 [9 9 9]
    np.argmin(t2, axis=1) # 每一行的最小值
    np.count_nonzero(t2) # 不为零的个数
    np.count_nonzero(t2 != t2) # 为nan的个数
    np.isnan(t2) # 那个位置为nan 那个位置为True
    np.sum(t2, axis=0) # 沿着行方向求列的和, axis 不写,默认求所有的和
    
    

    15 生成随机数组

    在每次随机之前,加上随机种子则后边每次生成的随机数都是一样的。

    16 浅拷贝深拷贝

    1. 浅拷贝 a = b, a = b[:]
    2. 深拷贝 a = b.copy()

    17 nan 和 inf

    ​ nan 表示不是一个数字, 属于float类型

    ​ inf 表示无穷 +inf 无穷大, -inf 无穷小

    附属:

    1.csv 内容

    品名,最低价,平均价,最高价,规格,单位,发布日期, 
    
    大白菜,0.40,0.50,0.60,存储,斤,2021-03-25
    
    大白菜,0.70,0.75,0.80,新,斤,2021-03-25
    
    娃娃菜,0.60,0.75,0.90,大小,斤,2021-03-25
    
    芹菜,0.80,0.90,1.00,鲁,斤,2021-03-25
    
    菠菜,0.70,1.00,1.30,长杆冀,斤,2021-03-25
    
    番茄,1.00,1.40,1.80,川鲁蒙,斤,2021-03-25
    
    番茄(精品),1.50,1.75,2.00,普通,斤,2021-03-25
    
    黄瓜,1.60,1.90,2.20,蒙辽袋鲁,斤,2021-03-25
    
    黄瓜(鲜干花),2.60,2.90,3.20,冀,斤,2021-03-25
    
    小黄瓜,4.00,5.50,7.00,旱荷兰,斤,2021-03-25
    
    茄子,1.20,1.70,2.20,鲁冀,斤,2021-03-25
    
    架豆,2.60,3.70,4.80,冀,斤,2021-03-25
    
    尖椒,1.40,1.95,2.50,冀晋/鲁新,斤,2021-03-25
    
    柿子椒,1.40,1.85,2.30,鲁新,斤,2021-03-25
    
    土豆,0.60,0.80,1.00,冀,斤,2021-03-25
    
    新土豆,0.70,0.95,1.20,陕冀云新,斤,2021-03-25
    
    黄葱头,0.80,1.00,1.20,蒙甘,斤,2021-03-25
    
    红葱头,0.90,1.15,1.40,普通,斤,2021-03-25
    
    葱,3.50,3.75,4.00,冀/苏鲁闽,斤,2021-03-25
    
    吊冬瓜,1.70,1.95,2.20,桂,斤,2021-03-25
    
    
  • 相关阅读:
    SQL 生成可配置流水号
    安卓程序进入后台和前台的判断
    Android代码故事第一回,平均间隔的按钮
    安卓冷知识:LayoutParams
    初识Android NDK
    搬家
    LaTeX表格紧跟文字 (不影响下方文本对齐)
    FlagCounter被封杀?自己实现一个简单的多国访客计数器
    Python+OpenCV竖版古籍文字分割
    Ubuntu18.04 显卡驱动+Cuda安装踩坑记录 以及Ubuntu虚拟内存的添加
  • 原文地址:https://www.cnblogs.com/ShanCe/p/14593818.html
Copyright © 2011-2022 走看看