Python机器学习、深度学习:快速、完全的Numpy入门指南

人工智能的小白资源群,这里有最齐全的干货资源,可以和你一样的入门小白一同交流学习亦可以得到专业技术大神的指导。欢迎入群813416857(AI人工智能学习交流),785685380(机器学习技术交流群),796764800(人工智能技术交流)群好好学习,天天向上。

NumPy是python的第三方科学计算包,全名称为Numerical Python extensions。NumPy包含以下几个功能组件:强大的N维数组对象(可以操控多为数组),优美巧妙的功能(广播)函数,对于线性代数,傅里叶变换,随机数的生成有着很好的支持。现在广泛用于机器学习与深度学习之中。

基础类型

NumPy中最基本的对象就是均匀多维数组,包含一系列相同类型的变量(一般数字),类似于数组,可以通过正整数来进行访问。注意,在Numpy中维数(dimensions)称之为axes。axes的数量就是rank(秩)。

举个例子,在一个三维空间中的一个点的坐标为[1, 3, 2],这是一个秩为1的数组,因为它只含有一个轴(axis),轴的长度为3。

接下来的这个例子的rank为2,因为它有两维。 
(注意这里的维数于向量中的维数不同,这里的维数相当于C语言中数组的维数,又称轴数。另外这里的rank不等同于矩阵中的秩,在python的语言中,维数的数量称之为rank)

  • 1
  • 2

第一维(轴)的数量为2([1, 0, 2],[0 ,2, 1]),第二维的数量为3(如第一个数组中的1,0,2)。 
再来区别一下python中rank与矩阵中rank(秩)的区别,numpy中多维数组其实就是矩阵,拥有和矩阵一样的性质。以下讲解中数组一般为多维数组。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注意NumPy中的数组类称之为ndarray,一般我们叫它的别名array,其这个与python标准库中的array.array不同,python中的只可以处理一维数组,功能上差很多。

基本定义方法

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

在平常的使用中,我们通常使用np做numpy的别名,这样可以使程序更加简洁便于阅读。 
下面例子也中展示了array的基本构造,注意,这样初始化是错误的!

  • 1
  • 2

另外,还可以这样构造

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

基本操作

算术算法操作同样适合数组,numpy可以方便地在数组中进行操作。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

注意,numpy中的乘法符号*对数组中的每个元素也是同样起作用的,这个与矩阵中的乘法不同(dot)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

numpy中也支持+=-+运算,在原先存在的array中进行操作(不是新创建一个数组)。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

上面的例子a+=b出现错误,这是因为numpy在操作不同类型的数据时,会朝着更精确的数据类型进行转化(类似于C语言中的向上转型)。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

numpy中可以使用很多“非数组”操作符来对数组进行操作,如求和sum,取平均mean。也可以通过设定axis参数来对特定的轴进行操作。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

通用操作

numpy中也有我们常见的数学函数sinexp等,但在numpy中这些函数是对数组中所有元素进行全局操作,与以往的函数不同,这里输入输出都为数组。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

numpy中的一维数组也可以进行索引、切片和迭代,这个和python中的lists有着相似的功能。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

对于多维的数组,可以对其特定“轴”(axis)进行操作:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

numpy中也有一种用法可以在多维数组简洁表示,使用dots(...)来表示同样数量的,比如: 
x为秩为5的数组(有5个axis) 
x[1,2,...]相当于x[1,2,:,:,:] 
x[...,3]相当于x[:,:,:,:,3] 
x[4,...,5,:]相当于x[4,:,:,5,:]

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在对多维数组进行迭代时,默认对第一维进行迭代:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

可以使用flat来对数组中所有单个元素进行迭代:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

形状(shape)操作

每个数组对象都有一个对应元素数量的形状

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

数组的形状是可以通过不同的命令进行改变的

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

reshape命令与resize命令功能相同,只是resize命令在自身上面进行改动

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如果reshape中某个参数赋予-1时,则这个参数会根据另一个参数进行自动填充

  • 1
  • 2
  • 3
  • 4

数组合并操作

数组之间可以相互进行合并,通过合并轴(axis)来实现

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

注意,在多于二维数组的操作中,vstack对数组中的第二轴进行堆叠,而hstack则对第一轴进行堆叠。

对多维数组进行切片

使用hspit函数可以对数组在水平轴上进行切割,可以指定切割后有多少相似数组数量,和切割后有多少列来进行切割。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

同样的vsplit可以对数组进行垂直切割。

复制和赋值

当在操作数组的时候,赋值和复制操作是不同的,这里需要注意。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

为什么会这样,因为python在传递时传递的是引用,类似于C++中的引用,上面的a和b其实是完全相同的,因为它们指向一个相同的对象,只是操作时的名称不同。如果想复制一个新的对象而不是引用,则需要使用其他操作符。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

这里view只是模子,但其实数据还是公用的,接下来的copy操作则实现了完全的复制

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

广播

广播是numpy一个非常强大的功能。你可以在一个数组中对其所有元素同时进行相同的操作,也可以同时操作两个及以上相同形状的多维数组,对其中的元素进行操作:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

关于广播功能还有很多,这里只进行简单的介绍。 
更多请看:https://docs.scipy.org/doc/numpy/user/quickstart.html

高级索引功能

numpy中除了通过特定的整数和切片进行访问,还有很多高级的索引访问功能:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

再举一个例子,下面这段程序模拟了从一个“着色板”里面取出颜色汇成一个色彩图像。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

当然也可以对多维进行操作:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

为了程序的美观和效率,一般这样使用:

  • 1
  • 2
  • 3
  • 4

深度学习常用的几个numpy函数

numpy.prod:返回数组内元素的乘积

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

numpy.pad:将数组(矩阵)周围进行填充

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

人工智能的小白资源群,这里有最齐全的干货资源,可以和你一样的入门小白一同交流学习亦可以得到专业技术大神的指导。欢迎入群813416857(AI人工智能学习交流),785685380(机器学习技术交流群),796764800(人工智能技术交流)群好好学习,天天向上。

NumPy是python的第三方科学计算包,全名称为Numerical Python extensions。NumPy包含以下几个功能组件:强大的N维数组对象(可以操控多为数组),优美巧妙的功能(广播)函数,对于线性代数,傅里叶变换,随机数的生成有着很好的支持。现在广泛用于机器学习与深度学习之中。

基础类型

NumPy中最基本的对象就是均匀多维数组,包含一系列相同类型的变量(一般数字),类似于数组,可以通过正整数来进行访问。注意,在Numpy中维数(dimensions)称之为axes。axes的数量就是rank(秩)。

举个例子,在一个三维空间中的一个点的坐标为[1, 3, 2],这是一个秩为1的数组,因为它只含有一个轴(axis),轴的长度为3。

接下来的这个例子的rank为2,因为它有两维。 
(注意这里的维数于向量中的维数不同,这里的维数相当于C语言中数组的维数,又称轴数。另外这里的rank不等同于矩阵中的秩,在python的语言中,维数的数量称之为rank)

  • 1
  • 2

第一维(轴)的数量为2([1, 0, 2],[0 ,2, 1]),第二维的数量为3(如第一个数组中的1,0,2)。 
再来区别一下python中rank与矩阵中rank(秩)的区别,numpy中多维数组其实就是矩阵,拥有和矩阵一样的性质。以下讲解中数组一般为多维数组。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注意NumPy中的数组类称之为ndarray,一般我们叫它的别名array,其这个与python标准库中的array.array不同,python中的只可以处理一维数组,功能上差很多。

基本定义方法

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

在平常的使用中,我们通常使用np做numpy的别名,这样可以使程序更加简洁便于阅读。 
下面例子也中展示了array的基本构造,注意,这样初始化是错误的!

  • 1
  • 2

另外,还可以这样构造

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

基本操作

算术算法操作同样适合数组,numpy可以方便地在数组中进行操作。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

注意,numpy中的乘法符号*对数组中的每个元素也是同样起作用的,这个与矩阵中的乘法不同(dot)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

numpy中也支持+=-+运算,在原先存在的array中进行操作(不是新创建一个数组)。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

上面的例子a+=b出现错误,这是因为numpy在操作不同类型的数据时,会朝着更精确的数据类型进行转化(类似于C语言中的向上转型)。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

numpy中可以使用很多“非数组”操作符来对数组进行操作,如求和sum,取平均mean。也可以通过设定axis参数来对特定的轴进行操作。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

通用操作

numpy中也有我们常见的数学函数sinexp等,但在numpy中这些函数是对数组中所有元素进行全局操作,与以往的函数不同,这里输入输出都为数组。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

numpy中的一维数组也可以进行索引、切片和迭代,这个和python中的lists有着相似的功能。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

对于多维的数组,可以对其特定“轴”(axis)进行操作:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

numpy中也有一种用法可以在多维数组简洁表示,使用dots(...)来表示同样数量的,比如: 
x为秩为5的数组(有5个axis) 
x[1,2,...]相当于x[1,2,:,:,:] 
x[...,3]相当于x[:,:,:,:,3] 
x[4,...,5,:]相当于x[4,:,:,5,:]

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在对多维数组进行迭代时,默认对第一维进行迭代:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

可以使用flat来对数组中所有单个元素进行迭代:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

形状(shape)操作

每个数组对象都有一个对应元素数量的形状

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

数组的形状是可以通过不同的命令进行改变的

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

reshape命令与resize命令功能相同,只是resize命令在自身上面进行改动

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如果reshape中某个参数赋予-1时,则这个参数会根据另一个参数进行自动填充

  • 1
  • 2
  • 3
  • 4

数组合并操作

数组之间可以相互进行合并,通过合并轴(axis)来实现

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

注意,在多于二维数组的操作中,vstack对数组中的第二轴进行堆叠,而hstack则对第一轴进行堆叠。

对多维数组进行切片

使用hspit函数可以对数组在水平轴上进行切割,可以指定切割后有多少相似数组数量,和切割后有多少列来进行切割。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

同样的vsplit可以对数组进行垂直切割。

复制和赋值

当在操作数组的时候,赋值和复制操作是不同的,这里需要注意。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

为什么会这样,因为python在传递时传递的是引用,类似于C++中的引用,上面的a和b其实是完全相同的,因为它们指向一个相同的对象,只是操作时的名称不同。如果想复制一个新的对象而不是引用,则需要使用其他操作符。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

这里view只是模子,但其实数据还是公用的,接下来的copy操作则实现了完全的复制

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

广播

广播是numpy一个非常强大的功能。你可以在一个数组中对其所有元素同时进行相同的操作,也可以同时操作两个及以上相同形状的多维数组,对其中的元素进行操作:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

关于广播功能还有很多,这里只进行简单的介绍。 
更多请看:https://docs.scipy.org/doc/numpy/user/quickstart.html

高级索引功能

numpy中除了通过特定的整数和切片进行访问,还有很多高级的索引访问功能:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

再举一个例子,下面这段程序模拟了从一个“着色板”里面取出颜色汇成一个色彩图像。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

当然也可以对多维进行操作:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

为了程序的美观和效率,一般这样使用:

  • 1
  • 2
  • 3
  • 4

深度学习常用的几个numpy函数

numpy.prod:返回数组内元素的乘积

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

numpy.pad:将数组(矩阵)周围进行填充

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

猜你喜欢

转载自blog.csdn.net/leoaran/article/details/81061071