• 机器学习三剑客之Nump


    Numpy基础

    NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy内部解除了Python的PIL(全局解释器锁),运算效率极好,是大量机器学习框架的基础库!

    Numpy简单创建数组

    1 import numpy as np
    2 # 创建简单的列表
    3 a = [1, 2, 3, 4]
    4 # 将列表转换为数组
    5 b = np.copy(a)

    Numpy查看数组属性

     1 #创建一维长度为5,二维长度为5的二维0数组
     2 b = np.zeros((5, 5))
     3 # 数组元素类型
     4 print(b.dtype)
     5 # 数组元素个数
     6 print(b.size)
     7 # 数组形状
     8 print(b.shape)
     9 # 数组维度
    10 print(b.ndim)

    快速创建N维数组的api函数

    1 # 创建5行5列的数值为浮点1的矩阵
    2 b = np.ones((5,5))
    3 print(b)
    4 # 创建10行10列的数值为浮点0的矩阵
    5 b = np.zeros((5,5))
    6 print(b)

      

    数组支持深浅拷贝

    1 b = np.ones((5,5))
    2 # 浅拷贝
    3 c = np.array(b)
    4 print(c)
    5 # 深拷贝
    6 d = np.asarray(b)
    7 print(d)

    Numpy创建随机数组 np.random

     

    • 均匀分布

    1 # 创建指定形状(示例为10行10列)的数组(范围在0至1之间)
    2 b = np.random.rand(10, 10)
    3 #创建指定范围内的一个数
    4 c = np.random.uniform(0, 100)
    5 # 创建指定范围内的一个整数
    6 d = np.random.randint(0,100)
    7 print(d)
    • 正态分布

    1 # 给定均值/标准差/维度的正态分布
    2 b = np.random.normal(1.75, 0.1, (5,5))
    3 print(b)
    • 索引,切片

    1 # 给定均值/标准差/维度的正态分布
    2 b = np.random.normal(1.75, 0.1, (5,5))
    3 print(b)
    4 # 数组的索引,截取第1行的第2列(从第0行算起)
    5 c = b[1,2]
    6 print(c)
    7 # 数组的切片,截取第1至2行的第2至3列(从第0行算起)
    8 d = b[1:3, 2:4]
    9 print(d)

      改变数组形状(要求前后元素个数匹配)

    1 print("reshape函数的使用!")
    2 one_20 = np.ones([20])
    3 print("-->1行20列<--")
    4 print (one_20)
    5 
    6 one_4_5 = one_20.reshape([4, 5])
    7 print("-->4行5列<--")
    8 print (one_4_5)

    Numpy计算(重要)

    条件运算

    1 b = np.array([[89, 92], [90, 91], [70, 52], [80, 82], [60, 59]])
    2 # 条件判断
    3 print(b > 80)
    4 # 三元运算,如果成绩小于80,则改为0,否则改为90
    5 c = np.where(b < 80, 0, 90)
    6 print(c)

    统计运算

    • 指定轴最大值 amax(参数1: 数组; 参数2: axis=0/1; 0表示列1表示行)

    1 b = np.array([[89, 92], [90, 91], [70, 52], [80, 82], [60, 59]])
    2 # 求每一列的最大值(0表示列)
    3 print("每一列的最大值为:")
    4 result = np.amax(b, axis=0)
    5 print(result)
    6 
    7 print("每一行的最大值为:")
    8 result = np.amax(b, axis=1)
    9 print(result)
    • 指定轴最小值 amin

    1 b = np.array([[89, 92], [90, 91], [70, 52], [80, 82], [60, 59]])
    2 print("每一列的最小值为:")
    3 result = np.amin(b, axis=0)
    4 print(result)
    5 
    6 # 求每一行的最小值(1表示行)
    7 print("每一行的最小值为:")
    8 result = np.amin(b, axis=1)
    9 print(result)
    • 指定轴平均值 mean

     1 b = np.array([[89, 92], [90, 91], [70, 52], [80, 82], [60, 59]])
     2 
     3 # 求每一行的平均值(0表示列)
     4 print("每一列的平均值:")
     5 result = np.mean(b, axis=0)
     6 print(result)
     7 
     8 # 求每一行的平均值(1表示行)
     9 print("每一行的平均值:")
    10 result = np.mean(b, axis=1)
    11 print(result)
    • 方差 std

     1 b = np.array([[89, 92], [90, 91], [70, 52], [80, 82], [60, 59]])
     2 
     3 # 求每一行的方差(0表示列)
     4 print("每一列的方差:")
     5 result = np.std(b, axis=0)
     6 print(result)
     7 
     8 # 求每一行的方差(1表示行)
     9 print("每一行的方差:")
    10 result = np.std(b,axis=1)
    11 print(result)

    数组运算

    • 数组与数的运算

    1 b = np.array([[89, 92], [90, 91], [70, 52], [80, 82], [60, 59]])
    2 
    3 print("加分前:")
    4 print(b)
    5 
    6 # 为所有平时成绩都加5分
    7 b[:, 0] = b[:, 0]+5
    8 print("加分后:")
    9 print(b)
    1 b = np.array([[89, 92], [90, 91], [70, 52], [80, 82], [60, 59]])
    2 
    3 print("减半前:")
    4 print(b)
    5 
    6 # 期末成绩减半
    7 b[:, 1] = b[:, 1]*0.5
    8 print("减半后:")
    9 print(b)
    • 数组间也支持加减乘除运算,但基本用不到

     1 a = np.array([1, 2, 3, 4])
     2 b = np.array([10, 20, 30, 40])
     3 c = a + b
     4 d = a - b
     5 e = a * b
     6 f = a / b
     7 print("a+b为", c)
     8 print("a-b为", d)
     9 print("a*b为", e)
    10 print("a/b为", f)

    矩阵运算np.dot()(非常重要)

    • 计算规则

        (M行, N列) * (N行, Z列) = (M行, Z列)

    b = np.array([[80, 80], [90, 90], [70, 70], [60, 60], [50, 90]])
    # 平时成绩占40% 期末成绩占60%, 计算结果
    q = np.array([[0.4], [0.6]])
    result = np.dot(b, q)
    print("最终结果为:")
    print(result)
    • 矩阵拼接
    • 矩阵垂直拼接(拼接的个数必须一样)
     1 print("v1为:")
     2 v1 = [[0, 1, 2, 3, 4, 5],
     3       [6, 7, 8, 9, 10, 11]]
     4 print(v1)
     5 print("v2为:")
     6 v2 = [[12, 13, 14, 15, 16, 17],
     7       [18, 19, 20, 21, 22, 23]]
     8 print(v2)
     9 # 垂直拼接
    10 result = np.vstack((v1, v2))
    11 print("v1和v2垂直拼接的结果为")
    12 print(result)

       

    • 矩阵水平拼接
    print("v1为:")
    v1 = [[0, 1, 2, 3, 4, 5],
          [6, 7, 8, 9, 10, 11]]
    print(v1)
    print("v2为:")
    v2 = [[12, 13, 14, 15, 16, 17],
          [18, 19, 20, 21, 22, 23]]
    print(v2)
    # 垂直拼接
    result = np.hstack((v1, v2))
    print("v1和v2水平拼接的结果为")
    print(result)

  • 相关阅读:
    BZOJ3670:[NOI2014]动物园(KMP)
    415. [HAOI2009] 旅行
    U10223 Cx大帝远征埃及
    U10206 Cx的治疗
    2741. [济南集训 2017] 掰巧克力
    复习题目汇总 over
    7-20 表达式转换(25 分)
    7-19 求链式线性表的倒数第K项(20 分)(单链表定义与尾插法)
    7-18 银行业务队列简单模拟(25 分)
    7-17 汉诺塔的非递归实现(25 分)(有待改进)
  • 原文地址:https://www.cnblogs.com/yhll/p/9203965.html
Copyright © 2020-2023  润新知