• Numpy知识点回顾与学习


    Numpy知识点回顾与学习

    什么是Numpy?

    Numpy使用Python进行科学计算的基础包。因为机器学习当中很多都会用到数组、线性代数等知识,经常需要和数组打交道,所以Numpy学习成为了科研之路上必须掌握的一门技能。Numpy包含以下的内容:

    • 一个强大的N维数组对象,可以通过这个对象进行矩阵的运算。
    • 复杂的(广播)功能。
    • 用于集成C/C++代码的工具。
    • 有用的线性代数,傅里叶变换和随机数功能。
    • 可以作为**通用数据的高校多维容器,定义任意的数据类型。**可以与各种数据库集成。

    Numpy数据类型

    Numpy支持比Python更多的数据类型。

    比如:

    • 5种基本数字类型:布尔型(bool),整数(int),无符号整数(uint),浮点数和复数。
    • 8位长、16位长、32位长、64位长的整型数字和无符好整型数字

    Numpy创建数组

    • numpy.array([需要的数组])
    • numpy.empty(shape,dtype=float,order=‘C’)
      • shape为数组形状,例如[3,2]
      • dtype为数据类型,为可选
      • order为内存中存储元素的顺序,有’c’和‘f’两种方式,代表行优先和列优先。
    • numpy.zeros(shape,dtype,order=‘C’)
      • 创建指定形状的数组,数组元素以0来填充
    • numpy.ones(shape,dtype,order=‘C’)
      • 创建指定形状的数组,数组元素以1来填充
    • numpy.zeros_like()
      • 创建与某个数组形状相同的数组,所有元素为0
    • numpy.ones_like()
      • 创建与某个数组形状相同的数组,所有元素为1
    • numpy.asarray()
      • 创建数组,可以将列表、元组转化为数组
    • numpy.arange(start,stop,step,dtype)
      • 根据起始和终止设置范围,step设置为步长,生成ndarray
    • numpy.linespace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)
      • 根据样本的起始和终止位置,以及样本数,设置是否包含stop的值,retstep为间距,为等差数列
    • numpy.logspace(start,stop,num,endpoint,base,dtype)
      • 基本同linespace,base是指去对数的时候log的下标。创建一个等比数列
    #创建数组的各种方法
    print(np.array([[1,2,3],[4,5,6]])) 
    print(np.arange(10,20,2)) 
    a = [(1,2,3),(4,5,6)] 
    print(np.asarray(a)) 
    print(np.ones((4,3),int,'c')) print(np.linspace(10,20,5,False,True,float)) print(np.logspace(0,9,10,True,base=2))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    ## Numpy的切片和索引
    
    • 1

    Numpy对象的内容可以通过索引和切片用来访问和修改,与Python中list的切片一样。

    切面与索引举例:

    #单维数组 
    a = np.arange(10) 
    print(slice(2,7,2)) 
    print(a[2:7:2]) 
    print(a[2:])  
    
    #多维数组 
    a = np.array([[1,2,3],[3,4,5],[4,5,6]]) 
    print(a[1:])            #输出第二行和第三行 
    print(a[...,1])         #第二列元素 
    print(a[1,...])         #第二行元素 
    print(a[...,1:])        #第二列以及后面的所有元素
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    高级索引

    • 整数数组索引

      • 一个数组访问另外一个数组,这个数组中的元素都是目标数组的某个维度的索引值。

        import numpy as np    
        x = np.array([[1,  2],  [3,  4],  [5,  6]])  
        y = x[[0,1,2],  [0,1,0]]   
        #访问(0,0),(1,1,),(2,0)这三个位置的元素
        print (y)
        
        • 1
        • 2
        • 3
        • 4
        • 5
    • ​ 布尔索引

      • 通过布尔运算,来获取符合指定条件的元素的数组。
      x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
      print(x[x>5])
      
      a = np.array([np.nan,  1,2,np.nan,3,4,5])   
      print (a[~np.isnan(a)])
      
      a = np.array([1,  2+6j,  5,  3.5+5j])   
      print (a[np.iscomplex(a)])
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • 花式索引

      • 花式索引指的是利用整数数组进行索引。 **花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。**花式索引跟切片不一样,它总是将数据复制到新数组中。
      x=np.arange(32).reshape((8,4)) 
      print(x) 
      # 二维数组读取指定下标对应的行 
      print("-------读取下标对应的行-------") 
      print (x[[4,2,1,7]])
      
      • 1
      • 2
      • 3
      • 4
      • 5

    Numpy广播

    广播(Broadcast)是numpy对不同形状的数组进行数值计算的方式。

    #如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。
    a = np.array([1,2,3,4])  
    b = np.array([10,20,30,40])  
    c = a * b  
    print (c)
    #当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制
    a = np.array([[ 0, 0, 0],            
                [10,10,10],            
                [20,20,20],            
                [30,30,30]]) 
    b = np.array([0,1,2]) 
    print(a + b)
    """
    输出结果为:
    [[ 0  1  2]  
    [10 11 12]  
    [20 21 22]  
    [30 31 32]]
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    广播的规则:

    • 让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。
    • 输出数组的形状是输入数组形状的各个维度上的最大值。
    • 如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。
    • 当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。
  • 相关阅读:
    使用Android原生制作毛玻璃效果图片
    BGP笔记
    懒人方案-半天搞定一个分布式后台管理系统
    普通人网上赚钱,抖音机会仍旧会非常大!
    网络原理(网络协议初识)
    抢票攻略来了!疫情后的首届云栖大会
    Facebook登录SDK
    SpringBoot整合第三方技术----缓存、任务、邮件、消息
    Mac下更新python
    文件上传预览下载
  • 原文地址:https://blog.csdn.net/m0_46335449/article/details/132715945