NumPy使用介绍

1.NumPy科学计算库介绍和环境准备

NumPy(Numerical Python)是Python的⼀种开源的数值计算扩展。提供多维数组对象,各种派⽣对象(如掩码数组和矩阵),这种⼯具可⽤来存储和处理⼤型矩阵,⽐Python⾃身的嵌套列表(nested list structure)结构要⾼效的多( 该结构也可以⽤来表示矩阵matrix ),⽀持⼤量的维度数组与矩阵运算,此外也针对数组运算提供⼤量的数学函数库,包括数学、逻辑、形状操作、排序、选择、输⼊输出、离散傅⽴叶变换、基本线性代数,基本统计运算和随机模拟等等

启动后有几处需要注意:

  1. 会生成一个html连接文件,直接打开即可进入到jupyter操作界面( C:\Users\Administrator\AppData\Roaming\jupyter\runtime\nbserver-14956-open.html )
  2. 或者复制提供的连接进行访问,例如:http://localhost:8888/?token=3566fc51fefd4fb9528c5a131d7f0beb7cc8c171639fff14
  3. token是用户验证的密钥信息
  4. 如果只打开了IP加8888端口,则在Password or token:中输入token验证,点击login即可登录
  5. 登录后可以在New选项中,创建一个目录、创建一个开发代码文件、开发代码交互界面

初次感受jupyter:

jupyter常用快捷键

shift + tab 函数用法介绍 tab键,代码补全 alt + enter,运行当前单元,并在下方插入一单元 ctrl + enter,运行当前单元,光标依然在当前单元格 esc 后 b键,在下方插入 ,a键,在上方插入单元 esc 后 2次d键,删除当前单元格

帮助中有全部快捷键大全

对比pycharm:

功能代码最终都可以实现功能,jupyter相对可以快速部署使用,引用变量即可OutPut输出;有些地方为了代码展示会使用pycharm更方便,所以后续都会使用到。

2.NumPy基本操作

2-1.创建数组

创建数组的最简单的⽅法就是使⽤array函数,将Python下的list转换为ndarray

例如上方的代码

numpy.array() 将列表转换为NumPy数组

从输出的内容看,数据是⼀样的

但是随着后续的使用会慢慢了解到同样的内容,NumPy数组的⽅法,功能更加强⼤,要比list能实现更多强大的功能

[注意]:np 和 numpy 后续都指numpy库模块,只是别名并无区别

我们可以利⽤np中的⼀些内置函数来创建数组,⽐如我们创建全0的数组,也可以创建全1数组,全是其他数字的数组,或者等差数列数组,正态分布数组,随机数。

shape=[2, 4] 行、列

fill_value 创建的内容

传入3个参数分别对应为

low 最小区间,包含low值

high 最大区间,不包含high值

size 取几个值

使用random.random函数会返回一个[0.0,1.0)之间的随机数值,zise定义输出个数;

而random.randn函数是返回一个标准正太分布数值,即理论上是(负无穷,正无穷)。实际上是在数值0附近徘徊

2-2.查看操作

NumPy的数组类称为ndarray,也被称为别名 array。请注意,numpy.array这与标准Python库类不同array.array,后者仅处理⼀维数组且功能较少

  • jupyter_contrib_nbextensions

    • 这个包能够对jupyter notebook进行扩展,丰富它的功能,比如函数代码的收叠,对于较长的notebook也可以通过它添加左边目录栏,便于定位
  • JupyterNbExtensions Configurator

    • 是Jupyter Notebook的一个扩展工具,只需勾选相应插件就能自动载入。可以让你在Jupyter Notebook上的工作效率进一步的提高

这样新启动的jupyter book会多一个新的菜单分页Nbextensions

可以理解成有一些其它工具例如pycharm等比较好的功能通过扩展插件来实现,扩展工具可以不安装,

3组 4行 5列

数组元素的总数相当于各维度的乘积

60 = 3 * 4 * 5

12 = 1 *2 * 6

数据类型为int32,⼀个字节是8位,相除得出4

2-3文件IO操作

save⽅法保存ndarray到⼀个npy⽂件,也可以使⽤savez将多个array保存到⼀个.npz⽂件中

通过jupyter创建:

-

使用load⽅法来读取存储的数组,如果是.npz⽂件的话,读取之后相当于形成了⼀个key-value类型的变量,通过保存时定义的key来获取相应的array

3.NumPy数据类型介绍

ndarray的数据类型:

可以在创建时指定:

可以在asarray转换时指定:

可以在数据类型转换astype时转换:

4.NumPy数组运算

数组arr中元素逐个逻辑比较

5.NumPy复制和视图

在操作数组时,有时会将其数据复制到新数组中,有时不复制

在jupyter中,同时输出多个内容用display()

不同的数组对象可以共享相同的数据。该view⽅法创建⼀个查看相同数据的新数组对象

6.NumPy索引、切片和迭代

对于⼆维数组或者⾼维数组,我们可以按照之前的知识来索引,当然也可以传⼊⼀个以逗号隔开的索引列表来选区单个或多个元素

切片时,从返回的数据对比看,切片不是深拷贝,而是浅拷贝

使用花式索引时,从返回的数据对比看,花式索引返回的是深拷贝,不再影响原数值

7.NumPy形状操作

-

8.NumPy广播机制

当两个数组的形状并不相同的时候,我们可以通过扩展数组的⽅法来实现相加、相减、相乘等操作,这种机制叫做⼴播(broadcasting)

可以简单的理解成一维数组是一条线,二维数组是一个面,现在将一维数组并入到二维中去,那么一条线并入到一个面,那么这条线需要纵向延长成面再与二维面合并,最终目的是为了达到一一对应的效果,才能够做到对应位置的合并。

列不够,纵向补齐

相当于数量份数不等的相加,需要把单份数据复制到份数相同时再相加

9.NumPy通用函数

9-1.元素级数字函数

9-2.where函数

where 函数,三个参数,条件为真时选择值的数组,条件为假时选择值的数组

9-3.排序方法

np中还提供了排序⽅法,排序⽅法是就地排序,即直接改变原数组

9-4.集合运算函数

9-5.数学和统计函数

10.NumPy线性代数

矩阵相乘最重要的方法是一般矩阵乘积。只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型