zoukankan      html  css  js  c++  java
  • 第三十七篇 numpy模块

    numpy模块

    import numpy as np
    

    numpy模块用于创建数组和数组的运算,是pandas、sklearn等模块的依赖包

    列表

    l = [1,2,3]
    print(l)   # [1, 2, 3]
    

    1.list的内置方法:1.索引 2.切片 3.长度 4.成员 5.for 6.其他内置方法

    2.np.array和list的区别

    • list是对一维数组进行操作,numpy对多维数组进行操作

    用numpy模块中的numpy.array创建数组

    一维数组

    1.一维数组只有一行,相当于现实中的一条线

    ar = np.array(l)
    print(ar)    # [1 2 3]
    

    2.列表推导式

    l1 = [i for i in range(1,10,1)]
    print(l1)    # [1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    3.numpy中的类似方法np.arange()

    ar1 = np.arange(9)
    print(ar1)   # [0 1 2 3 4 5 6 7 8]
    ar2 = np.arange(0,9,2)
    print(ar2)    # [0 2 4 6 8]
    

    二维数组(用到最多)

    有行有列,相当于一个面,也可以说是一个列表中装了多个一维

    arr1 = np.array([  [1, 2, 3], [4, 5, 6]  ])
    print(arr1)
    '''
    打印结果:
    [[1 2 3]
     [4 5 6]]
    '''
    

    三维数组(了解)

    x,y,z坐标。相当于一个体,也可以说是一个列表中装了多个二维数组

    arra1 = np.array([  [ [1, 2, 3], [4, 5, 6] ], [ [1, 2, 3], [4, 5, 6] ], [ [1, 2, 3], [4, 5, 6] ]  ])
    print(arra1)
    '''
    打印结果:
    [[[1 2 3]
      [4 5 6]]
    
     [[1 2 3]
      [4 5 6]]
    
     [[1 2 3]
      [4 5 6]]]
    '''
    

    数组的运算

    1.以二维数组为例,获取多维数组的行和列

    arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
    '''
    列一 二 三 四
    [[ 1  2  3  4]       第一行
     [ 5  6  7  8]       第二行
     [ 9 10 11 12]]      第三行
    '''
    print(arr.shape)   # (3, 4),以元组的形式返回3行4列
    print(arr.shape[0])   # 3行
    print(arr.shape[1])    # 4列
    

    2.多维数组的索引

    • 中括号加索引,行和列用逗号隔开
    #一定要记住索引都是从0开始的
    print(arr[1, 2])     # 7    第二行第三列的元素
    print(arr[0,3::-1])   # [4 3 2 1]   第一行从第四列开始往前取所有元素
    print(arr[1, :])      # [5 6 7 8]   第二行所有元素
    print(arr[2,1:3])    # [10 11]   第三行从第二列到第三列的元素
    print(arr[:, 2])        # [ 3  7 11]    第三列所有元素
    print(arr[:2, 3])   # [4 8]   第四列从第一行到第二行的元素(切片顾头不顾尾)
    
    # 可以把通过索引取值或切片方法取出来的元素赋值
    arr[0,:] = 1    # 第一行的元素全部赋值为1
    print(arr)
    '''
    [[ 1  1  1  1]
     [ 5  6  7  8]
     [ 9 10 11 12]]
    '''
    

    3.高级功能

    • 可以用比较运算符得到多维数组中元素的bool值
    print(arr>=10)
    '''
    打印结果:
    [[False False False False]
     [False False False False]
     [False True  True  True]]
    '''
    # 通过bool值进行数组中数据的过滤
    # 把bool值为True的元素通过索引取值的方法取出来进行下一步操作
    arr[arr >= 10] = 0
    print(arr)
    '''
    [[1 2 3 4]
     [5 6 7 8]
     [9 0 0 0]]
    '''
    

    4.多维数组的合并

    arr1 = np.array([[1, 1, 1], [1, 1, 1]])
    arr2 = np.array([[2, 2, 2], [2, 2, 2]])
    # vstack和hstack只能放一个参数,这个参数必须是容器
    # np.vstack:按垂直方向(行顺序)堆叠数组构成一个新的数组
    arr3 = np.vstack([arr1, arr2])   #里面以元组形式或列表形式放都可以
    print(arr3)
    '''
    [[1 1 1]
     [1 1 1]
     [2 2 2]
     [2 2 2]]
    '''
    # np.hstack:按水平方向(列顺序)堆叠数组构成一个新的数组
    arr4 = np.hstack([arr1, arr2])
    print(arr4)
    '''
    [[1 1 1 2 2 2]
     [1 1 1 2 2 2]]
    '''
    
    # np.concatenate合并多维数组,默认是按列合并(也就是每行的元素个数必须相同)
    arr5 = np.concatenate((arr1, arr2))
    print(arr5)
    '''
    [[1 1 1]
     [1 1 1]
     [2 2 2]
     [2 2 2]]
    '''
    # 在numpy中,为了统一处理,只要有axis参数的,axes=0就是列,axis=1就是行
    arr5 = np.concatenate([arr1, arr2], axis=0)    # 垂直
    print(arr5)
    '''
    [[1 1 1]
     [1 1 1]
     [2 2 2]
     [2 2 2]]
    '''
    arr5 = np.concatenate([arr1, arr2], axis=1)    # 水平
    print(arr5)
    '''
    [[1 1 1 2 2 2]
     [1 1 1 2 2 2]]
    '''
    

    5.通过函数方法创建多维数组

    • 一维数组
    print(np.arange(10))     # [0 1 2 3 4 5 6 7 8 9]
    
    • np.ones() 全1矩阵
    print(np.ones([3,4]))   # 默认是浮点型,dtype=float
    '''
    [[1. 1. 1. 1.]
     [1. 1. 1. 1.]
     [1. 1. 1. 1.]]
    '''
    print(np.ones((3,2,1),dtype=int))   # 2和1控制二维数组中的行和列,3才是三维数组中的“z轴”
    '''
    两行一列三层
    [[[1]
      [1]]
    
     [[1]
      [1]]
    
     [[1]
      [1]]]
    '''
    
    • np.zeros() 全0矩阵
    # bytes默认是浮点型,可以用bytes=int输出整型格式
    print(np.zeros((3, 2, 2)))  # 3控制三维的层数,2,2控制二维数组的行和列
    '''
    两行两列三层
    [[[0. 0.]
      [0. 0.]]
    
     [[0. 0.]
      [0. 0.]]
    
     [[0. 0.]
      [0. 0.]]]
    '''
    
    • np.eye() 构造多个主元的单位矩阵
    '''
    主元就是每个非零行第一个非零元素就是主元。
    1是主元,在矩阵中从左上角斜着排放到右下角
    构成行和列相等的矩阵
    
    '''
    print(np.eye(4))      # 构造4个主元的单位矩阵
    '''
    [[1. 0. 0. 0.]
     [0. 1. 0. 0.]
     [0. 0. 1. 0.]
     [0. 0. 0. 1.]]
    '''
    
    • np.empty() 构造一个随机矩阵,里面的元素是随机生成的
    print(np.empty([3,2]))
    '''
    [[2.12199579e-314 2.12199579e-314]
     [2.12199579e-314 4.24399158e-314]
     [4.24399158e-314 4.24399158e-314]]
    '''
    

    6.矩阵的运算

    '''
    +  两个矩阵对应元素相加
    -  两个矩阵对应元素相减
    *  两个矩阵对应元素相乘
    /  两个矩阵对应元素相除,如果都是整数则取商
    %  两个矩阵对应元素相除后取余数
    **n    单个矩阵每个元素都取n次方,如arr**2:arr中的每个元素都取平方
    '''
    

    7.多维数组的点乘和转置(了解)

    arr1 = np.array([[1, 1, 1], [1, 1, 1]])
    arr2 = np.array([[1,1,1],[2,2,2],[3,3,3]])
    arr3 = arr2.T      # 转置,将行和列的元素进行互换
    print(arr3)
    '''
    [[1 2 3]
     [1 2 3]
     [1 2 3]]
    '''
    arr = np.dot(arr1,arr3)   # 点乘
    print(arr)
    '''
    [[3 6 9]
     [3 6 9]]
    '''
    

    8.其他

    # 求逆
    np.linalg.inv()
    
    #最大值
    print(arr1.max())   # 1
    
    # 最小值
    print(arr2.min())   # 1
    
    # np.random.rand() 生成随机元素的矩阵
    print(np.random.rand(3,3))   # 元素的值在0到1之间
    '''[[0.343468   0.54926958 0.38615662]
     [0.32390036 0.37597149 0.5029658 ]
     [0.84369977 0.0396894  0.49684206]]'''
    
    # np.random.seed()  随机数种子
    np.random.seed(1)
    print(np.random.rand(3,3))   # 永不随机,固定的
    '''
    [[4.17022005e-01 7.20324493e-01 1.14374817e-04]
     [3.02332573e-01 1.46755891e-01 9.23385948e-02]
     [1.86260211e-01 3.45560727e-01 3.96767474e-01]]
    '''
    
    # 和上面一样,固定随机元素,永不随机
    res = np.random.RandomState(1)
    print(res.rand(3,3))
    '''[[4.17022005e-01 7.20324493e-01 1.14374817e-04]
     [3.02332573e-01 1.46755891e-01 9.23385948e-02]
     [1.86260211e-01 3.45560727e-01 3.96767474e-01]]'''
    
  • 相关阅读:
    Nginx配置文件nginx.conf中文详解(转)
    windows Nginx基本使用方法
    phpstorm 找到文件修改历史
    微信小程序模拟点击出现问题解决方法
    设置头像、商品、轮播图为背景图时需要的css
    div左右居中css
    自定义方形复选框
    css 调转180度:transform: rotate(180deg);
    js字符串转数字(小数),数字转字符串
    腾讯地图key秘钥
  • 原文地址:https://www.cnblogs.com/itboy-newking/p/11041703.html
Copyright © 2011-2022 走看看