zoukankan      html  css  js  c++  java
  • python numpy模块

    numpy模块

    回顾一下有哪些数据类型

    int/float/str/list/tuple/dict/set

    numpy是python一种开源的数值计算扩展库.这种库可用来存储和处理大型矩阵,比python自身的嵌套列表结构要高效的多(该结构也可以用来表示矩阵)

    作用:
    1.区别于list列表,提供了数组操作、数组运算、以及统计分布和简单的数学模型
    2.计算速度快,甚至优于python内置的简单运算,使其成为pandas、sklearn等模块的依赖包。高级的框架如TensorFlow、PyTorch等,其数组操作也和numpy非常相似

    矩阵即numpy的np.array对象,创建矩阵就是把列表传入np.array()

    import numpy as np
    

    一维数组

    • 只有一行
    • 相当于一条直线
    lis =[1,2,3]
    lis
    
    [1, 2, 3]
    
    np.array(lis)
    
    array([1, 2, 3])
    

    二维数组(用的最多的)

    • 有行有列
    • 相当于一个面,里面有多条线,一个列表里装了多个一维
    arr = np.array([  [1,2,3,4],   [5,6,7,8]  ])
    arr  #在pycharm中需要print(arr)
    
    array([[1, 2, 3, 4],
           [5, 6, 7, 8]])
    

    学习numpy的方法使用,先来联想一下list的内置方法使用
    1.索引
    2.切片
    3.长度
    4.成员运算
    5.for循环
    6.其他一些内置方法

    比较一下 np.array 和 list 的区别
    1.np.array是多维的,list是一维的
    2.list对一维数组做一些操作,numpy其实就是对多维做操作

    获取多维数组的行和列

    arr =np.array([ [1,2,3,4],[5,6,7,8],[5,6,7,8]])
    arr
    
    array([[1, 2, 3, 4],
           [5, 6, 7, 8],
           [5, 6, 7, 8]])
    
    arr.shape #获得多维数组的行和列,以元组形式表现出来
    
    (3, 4)
    
    arr.shape[0] #多维数组的行
    
    3
    
    arr.shape[1] #多维数组的列
    
    4
    
    print(arr.shape)
    print(arr.shape[0])
    arr.shape[1]
    
    (3, 4)
    3
    
    4
    
    arr.shape
    arr.shape[1]
    arr.shape[0]
    
    3
    

    arr.shape ,按照代码运行,直接运行最后一个结果显示处理,用print方法就可以把每一个方法打印出来

    多维数组的索引

    lis = [1,2,3,4]
    #lis[-1]
    lis[3]
    
    4
    
    arr
    
    array([[1, 2, 3, 4],
           [5, 6, 7, 8],
           [5, 6, 7, 8]])
    

    arr #jupyter中前面运行的结果可以直接用,如果前面arr未运行生成,就会报错

    • 中括号中加索引,行和列用逗号分开,可以取到数组中的数
    arr[1,1] #  行和列索引都从0开始,取第2行第2列
    
    6
    
    arr[0,[0,1,2,3]] #第一行,第1,2,3,4列的数
    
    array([1, 2, 3, 4])
    
    arr[0,:] #第一行,第1,2,3,4列的数
    
    array([1, 2, 3, 4])
    
    arr[0:] #没有逗号的时候取出了全部
    
    array([[1, 2, 3, 4],
           [5, 6, 7, 8],
           [5, 6, 7, 8]])
    
    arr[:,0] #所有行,第1列的数
    
    array([1, 5, 5])
    

    高级功能

    • 有一个多维数组存储的是人的年龄,表格里有200岁以上的年龄
    arr = np.array([ [1000,2,300,4],[5,600,7,8],[5,6,700,8]])
    arr
    
    array([[1000,    2,  300,    4],
           [   5,  600,    7,    8],
           [   5,    6,  700,    8]])
    
    arr>200 
    
    array([[ True, False,  True, False],
           [False,  True, False, False],
           [False, False,  True, False]])
    
    arr[arr>200] #取出数组中大于200的元素,并一维数组表现出来
    
    array([1000,  300,  600,  700])
    

    多维数组的元素的替换

    lis =[1,2,3,4]
    lis[0]=9
    lis
    
    [9, 2, 3, 4]
    
    arr
    
    array([[1000,    2,  300,    4],
           [   5,  600,    7,    8],
           [   5,    6,  700,    8]])
    
    arr[1,1]=0
    arr
    
    array([[1000,    2,  300,    4],
           [   5,    0,    7,    8],
           [   5,    6,  700,    8]])
    
    arr[0,:]=0
    arr
    
    array([[  0,   0,   0,   0],
           [  5,   0,   7,   8],
           [  5,   6, 700,   8]])
    
    arr = np.array([ [1000,2,300,4],[5,600,7,8],[5,6,700,8]])
    arr
    
    array([[1000,    2,  300,    4],
           [   5,  600,    7,    8],
           [   5,    6,  700,    8]])
    
    arr[arr>200]=0  #数组中大于200的数替换成了0
    arr
    
    array([[0, 2, 0, 4],
           [5, 0, 7, 8],
           [5, 6, 0, 8]])
    
    ## 多维数组的合并
    
    arr1=np.array([ [1,2,3,4],[5,6,7,8]])
    arr1
    
    array([[1, 2, 3, 4],
           [5, 6, 7, 8]])
    
    arr2=np.array([ [9,10,11,12],[13,14,15,16]])
    arr2
    
    array([[ 9, 10, 11, 12],
           [13, 14, 15, 16]])
    
    * vstack 和 hstack 只能放一个参数,这个参数必须是容器
    
    np.vstack((arr1,arr2)) #vertical 垂直新的
    
    array([[ 1,  2,  3,  4],
           [ 5,  6,  7,  8],
           [ 9, 10, 11, 12],
           [13, 14, 15, 16]])
    
    np.hstack((arr1,arr2))  #horizon 水平的
    
    array([[ 1,  2,  3,  4,  9, 10, 11, 12],
           [ 5,  6,  7,  8, 13, 14, 15, 16]])
    
    np.concatenate((arr1,arr2)) # concatenate 连接的意思,默认垂直合并
    
    array([[ 1,  2,  3,  4],
           [ 5,  6,  7,  8],
           [ 9, 10, 11, 12],
           [13, 14, 15, 16]])
    

    ==在numpy中,为了统一做处理,只要有axis参数的,axis=0就是列,axis=1就是行

    np.concatenate((arr1,arr2),axis=1) #水平
    
    array([[ 1,  2,  3,  4,  9, 10, 11, 12],
           [ 5,  6,  7,  8, 13, 14, 15, 16]])
    
    np.concatenate((arr1,arr2),axis=0)#垂直,默认垂直
    
    array([[ 1,  2,  3,  4],
           [ 5,  6,  7,  8],
           [ 9, 10, 11, 12],
           [13, 14, 15, 16]])
    

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

    [i for i in range(10)]
    
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    np.arange(10)
    
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    
    np.arange(1,10,2)
    
    array([1, 3, 5, 7, 9])
    
    # ones
    np.ones((3,4)) #默认是浮点型
    # np.ones((3,4),dtype=int)
    
    array([[1., 1., 1., 1.],
           [1., 1., 1., 1.],
           [1., 1., 1., 1.]])
    
    np.ones((3,4),dtype=int)
    
    # zeros
    np.zeros((3,4))
    
    array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    
    np.zeros((3,4,5)) #5控制一维,4,5控制二维,3,4,5控制三维
    
    array([[[0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.]],
    
           [[0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.]],
    
           [[0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.]]])
    
    np.zeros((3,4,5))
    
    array([[[0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.]],
    
           [[0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.]],
    
           [[0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.],
            [0., 0., 0., 0., 0.]]])
    
    ## eye
    np.eye(5) #5,5 5行和5列
    
    array([[1., 0., 0., 0., 0.],
           [0., 1., 0., 0., 0.],
           [0., 0., 1., 0., 0.],
           [0., 0., 0., 1., 0.],
           [0., 0., 0., 0., 1.]])
    

    矩阵的运算

    • 两个矩阵对应元素相加
    • 两个矩阵对应元素相减
    • 两个矩阵对应元素相乘
      / 两个矩阵对应元素相除,如果都是整数则取商
      % 两个矩阵对应元素相除后取余数
      n 单个矩阵每个元素都取n次方,如2:每个元素都取平方
    arr1
    
    array([[1, 2, 3, 4],
           [5, 6, 7, 8]])
    
    arr2
    
    array([[ 9, 10, 11, 12],
           [13, 14, 15, 16]])
    
    arr1+arr2
    
    array([[10, 12, 14, 16],
           [18, 20, 22, 24]])
    
    arr1*2
    
    array([[ 2,  4,  6,  8],
           [10, 12, 14, 16]])
    

    点乘和转置(了解) 点乘必须 m*n n *m

    arr1
    
    array([[1, 2, 3, 4],
           [5, 6, 7, 8]])
    
    arr2
    
    array([[ 9, 10, 11, 12],
           [13, 14, 15, 16]])
    
    np.dot(arr1,arr2.T)
    
    array([[110, 150],
           [278, 382]])
    

    求逆(了解)

    np.linalg.inv(np.dot(arr1,arr2.T))
    
    array([[ 1.19375, -0.46875],
           [-0.86875,  0.34375]])
    

    最大 小值

    arr1
    
    array([[1, 2, 3, 4],
           [5, 6, 7, 8]])
    
    arr1.max()
    
    8
    
    arr1.min()
    
    1
    

    numpy生成随机数

    固定随机数,让它不随机

    np.random.rand(3,4)
    
    array([[0.20445225, 0.87811744, 0.02738759, 0.67046751],
           [0.4173048 , 0.55868983, 0.14038694, 0.19810149],
           [0.80074457, 0.96826158, 0.31342418, 0.69232262]])
    
    np.random.seed(1) #永不随机,固定,如果不加,每运行一次结果都不一样
    np.random.rand(3,4)
    
    array([[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, 5.38816734e-01, 4.19194514e-01, 6.85219500e-01]])
    
    rs =np.random.RandomState(1) #第二种方法
    rs.rand(3,4)
    
    array([[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, 5.38816734e-01, 4.19194514e-01, 6.85219500e-01]])
  • 相关阅读:
    Django学习之
    Django学习之
    Django学习之
    .NET 获取客户端的操作系统版本、浏览器版本和IP地址
    C#读取XML文件并取值
    C#设计模式之抽象工厂
    C#设计模式之工厂方法
    Jquery表单提交后获取返回Json值
    .Net自带缓存Cache的使用
    EasyUI第一章Application之Basic CRUD(增删改查)
  • 原文地址:https://www.cnblogs.com/geyatou322/p/11012088.html
Copyright © 2011-2022 走看看