开发者

python扩展库numpy入门教程

目录
  • 一、numpy是什么?
  • 二、numpy数组
    • 2.1 数组使用
    • 2.2 创建数组
      • 1. 使用emptywww.cppcns.com创建空数组
      • 2. 使用arange函数创建
      • 3. 使用zeros函数生成数组
      • 4. ones函数生成数组
      • 5. diag函数生成对角矩阵
      • 6. N维数组
    • 2.3 访问数组元素
    • 三、了解矩阵
      • 3.1 广播

      一、numpy是什么?

      扩展库numpy是python支持科学计算的重要扩展库,是数据分析和科学计算领域如scipy、pandas、sklearn 等众多扩展库中的必备扩展库之一,提供了强大的N维数组及其相关运算、复杂的广播函数、C/C++和Fortran代码集成工具以及线性代数、傅里叶变换和随机数生成等功能。本章童点介绍数组与矩阵及其相关运算,为学习和理解后面章节中的数据分析、机器学习打下良好的基础。

      简单来说就是你用来为人工智能领域打基础的东西,私话说得好,基础不牢,地动山摇嘛~

      所以这个地方可要好好学习哦~~

      二、numpy数组

      在numpy中使用的不是python自带的数据类型list,而是numpy中的ndarray

      那为什么使用ndarray而不是使用list呢?

      因为ndarray是由c/c++写出来的,占用内存更小,使用速度更快

      创建一个ndarray的方法有很多,这里说下使用array方法转化的

      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      # @Authohttp://www.cppcns.comr: Smly
      # @datetime: 2021/9/26 22:22 
      # @Version: 1.0
      
      import numpy as np
      
      li = [1, 2, 3]
      tp = (1, 2, 3)
      
      nday1 = np.array(li)
      nday2 = np.array(tp)
      DlahiLfMYl
      print("*****类型*****")
      print(type(nday1))
      print(type(nday2))
      
      print("*****数组*****")
      print(nday1)
      print(nday2)
      

      输出结果:

      *****类型*****
      <class 'numpy.ndarray'>
      <class 'numpy.ndarray'>
      *****数组*****
      [1 2 3]
      [1 2 3]
      

      2.1 数组使用

      如果元素相同的话,可以进行加减乘除

      在元素个数相同的情况下,可以进行数组间的加减

      在元素个数相同的情况下,可以进行数组间的乘除

      对某个数进行的乘除,可以自动进行到所有元素

      看例子理解:

      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      # @Author: Smly
      # @datetime: 2021/9/26 22:22 
      # @Version: 1.0
      import numpy as np	
      li = [1, 2, 3]	# 列表
      tp = (1, 2, 3)	# 元组
      nday1 = np.array(li)	# 内置方法将列表转为ndarray
      nday2 = np.array(tp)	# 内置方法将元组转为ndarray
      nday3 = np.array(range(5)) # 使用range内置函数方法生成ndarray连续数组
      nday4 = np.array(range(5, 10))  # 使用range内置函数方法生成ndarray连续数组
      print("*****类型*****")
      print(type(nday1))
      print(type(nday2))
      print(type(nday3))
      print(type(nday4))
      print("*****数组*****")
      print(nday1)
      print(nday2)
      print(nday3)
      print(nday4)
      print("*****数组加减*****")
      print(nday2 + nday1)
      print(nday2 - nday1)
      print(nday4 - nday3)
      print(nday3 + nday4)
      # 在元素个数相同的情况下,可以进行数组间的加减
      print("*****数组乘除*****")
      print(nday2 * nday1)
      print(nday2 // nday1)
      print(nday4 * nday3)
      print(nday4 // nday3)
      # 在元素个数相同的情况下,可以进行数组间的乘除
      print(nday1 * 3)
      print(nday2 // 2)
      print(nday3 * 2)
      print(nday4 // 2)
      # 对某个数进行的乘除,可以自动进行到所有元素
      
      
      

      运行结果:

      *****类型*****
      <class 'numpy.ndarray'>
      <class 'numpy.ndarray'>
      <class 'numpy.ndarray'>
      <class 'numpy.ndarray'>
      *****数组*****
      [1 2 3]
      [1 2 3]
      [0 1 2 3 4]
      [5 6 7 8 9]
      *****数组加减*****
      [2 4 6]
      [0 0 0]
      [5 5 5 5 5]
      [ 5  7  9 11 13]
      *****数组乘除*****
      [1 4 9]
      [1 1 1]
      [ 0  6 14 24 36]
      [0 0 0 0 0]
      [3 6 9]
      [0 1 1]
      [0 2 4 6 8]
      [2 3 3 4 4]
      
      

      2.2 创建数组

      刚刚的array()方法是将列表和元组等迭代对象转为ndarray数组

      接下来要说的是自动创建数组

      1. 使用empty创建空数组

      里面会有初始值,但是数组初始为None

      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      # @Author: Smly
      # @datetime: 2021/9/28 12:29 
      # @VersiDlahiLfMYlon: 1.0
      import numpy as np
      em1 = np.empty(5)       # 创建一个长度为5的空数组
      em2 = np.empty((2, 2))  # 创建一个2*2的空二维数组
      
      print("一维数组,长度为5", em1)
      print("二维数组,长度为2*2", em2)
      
      

      输出结果:

      [9.96754604e-312 9.96754614e-312 2.60799828e-310 9.34609789e-307
       0.00000000e+000]
      [[6.95299778e-310 9.96747617e-312]
       [0.00000000e+000 6.95299776e-310]]
      

      2. 使用arange函数创建

      arange是numpy自带的的一个方法,作用与range这个Python内置函数相差无几,都是生成数组

      先导入numpy包

      import numpy as np
      

      然后创建数组

      print("*****ararge创建数组*****")
      
      aran_arr1 = np.arange(5)
      aran_arr2 = np.arange(5, 10)
      
      print("*****类型*****")
      print(type(aran_arr1))
      print(type(aran_arr2))
      
      print("*****数组*****")
      print(aran_arr1)
      print(aran_arr2)
      
      

      3. 使用zeros函数生成数组

      zeros函数是numpy自带的方法,作用是生成指定数量的全0一维数组,全0二维数组等

      看下面的例子:

      生成一个具有三个元素的一维数组和一个具有五个元素的一维数组:

      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      # @Author: Smly
      # @datetime: 2021/9/27 21:31 
      # @Version: 1.0
      
      import numpy as np
      zero_arr = np.zeros(3)
      zrro_arr2 = np.zeros(5)
      print(zero_arr)
      print(zrro_arr2)
      

      运行结果:

      [0. 0. 0.]

      [0. 0. 0. 0. 0.]

      当然这只是一位数组,你还可以生成二维数组,也就是矩阵

      使用如下代码可以生成一个三行三列的矩阵

      zero_arr3 = np.zeros((3, 3))
      

      输出看看:

      print(zero-arr3)
      

      运行结果:

      [[0. 0. 0.]

       [0. 0. 0.]

       [0. 0. 0.]]

      4. ones函数生成数组

      使用ones函数生成全1函数,方法同zeros

      import numpy as np
      
      ones_arr1 = np.ones(3)
      

      输出结果:

      [1. 1. 1.]

      生成一个三行三列的矩阵

      import numpy as np
      
      ones_arr2 = np.ones((3, 3))
      

      输出结果:

      [[1. 1. 1.]

       [1. 1. 1.]

       [1. 1. 1.]]

      5. diag函数生成对角矩阵

      什么是对角矩阵?你应该听说过对角线,矩阵就是生成在对角线上的矩阵

      函数参数是一个元祖

      看代码和运行结果能够理解的更深刻

      import numpy as np
      
      diag_arr = np.diag((4, 3, 2, 1))
      

      将diag_arr的输出的结果为:

      [[4 0 0 0]

       [0 3 0 0]

       [0 0 2 0]

       [0 0 0 1]]

      看,对角线是不是你函数的参数,这下理解了吧

      6. N维数组

      N维数组就是多维数组,可以理解为数组里面还是数组,里面还是数组,可以参照这个形式

      [[[1 2]

        [3 4]]

       [[5 6]

        [7 8]]]

      这个概念确实有点抽象,有点难理解。这就是一个三维数组,是通过三维列表使用array方法转换成ndarray的

      代码:

      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      # @Author: Smly
      # @datetime: 2021/9/27 13:29 
      # @Version: 1.0
      import numpy as np
      
      li = [
          [[1, 2], [3, 4]],
          [[5, 6], [7, 8]]
      ]
      te1 = np.array(li)
      print(te1)
      
      

      当然,二维数组也算是N维数组

      2.3 访问数组元素

      numpy自带了一个insert函数,可以往数组中插入元素

      看实例:

      li = [[1, 2, 3, 4], [5, 6, 7, 8], [2, 4, 6, 8]]
      gb1 = np.array(li)
      np.insert(gb1, 1, [1, 2, 3, 4])
      

      输出结果:

      [1 1 2 3 4 2 3 4 5 6 7 8 2 4 6 8]

      还有一个自带的add函数,可以进行数组的相加减

      数组嘛,可以使用下标来获取数组元素

      import numpy as np
      
      li1 = [1, 2, 3, 4]
      gb2 = np.array(li1)
      print(gb2[1])
      

      输出结果为:

      2

      当然,它是一个数组,你理所应当的也可以使用循环语句来遍历数组

      三、了解矩阵

      数组是数组,矩阵是矩阵。

      数组是一种数据结构,可以存储多种数据,可以有多维

      矩阵是数学中的一个概念,只能存放数字,并且只能是二维的形式

      生成矩阵的方法就和生成N维数组的方法是一样的

      先使用列表创建二维列表,然后再使用numpy的方法转成矩阵,当然也有好几中生成矩阵的方法

      import numpy as np
      li = [[1, 2, 3, 4], [5, 6, 7, 8]]
      j1 = np.matrix(li)
      print(j1)
      print(type(j1))
      print(j1.dtype)
      

      输出该矩阵:

      输出矩阵: [[1 2 3 4]
       [5 6 7 8]]
      矩阵在Python的类型: <class 'numpy.matrix'>
      在numpy中的类型: int32
      

      矩阵可以进行各种数学运算,在numpy中都得到了很好的支持,这里就不细说了

      3.1 广播

      何为广播,广播就是能将你的东西发送到各个区域,一般在计算机中是将信息发送到局域网络中的每个计算机中。

      而在numpy中也有广播,只不过他是将元素自动补到数组,矩阵上,就像你在上面看到的,一个数组乘除一个元素,数组中的所有元素都会乘这个数

      import numpy as np
      
      li1 = [1, 2, 3, 4]
      print(np.array(li1)*10)
      

      输出结果:

      [10 20 30 40]

      这个就是广播,就是将数字10播到li转成的数组中,能够让数组所有元素都乘10。

      而不同维度的数组也可以这样

      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      # @Author: Smly
      # @datetime: 2021/9/27 13:40 
      # @Version: 1.0
      import numpy as np
      li = [[1, 2, 3, 4], [5, 6, 7, 8], [2, 4, 6, 8]]
      gb1 = np.array(li)
      li1 = [1, 2, 3, 4]
      gb2 = np.array(li1)
      print(gb1*gb2)
      
      

      将一维数组的每个元素挨个广播到二维数组,前提是:

      二维数组中的一维数组的个数与一维数组的个数是相同的

      运行结果:

      [[ 1  4  9 16]

       [ 5 12 21 32]

       [ 2  8 18 32]]

      以上就是python扩展库numpy入门教程的详细内容,更多关于numpy库入门的资料请关注编程客栈我们其它相关文章!

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜