Numpy

Fighting365 机器学习算法与Python学习

Numpy

Numpy

Numpy是Python中用于科学计算的核心库。它提供了高性能的多维数组对象,以及相关工具。(本文文末的原文链接为numpy的官方文档)
NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。

数组

一个numpy数组是一个由不同数值组成的网格。网格中的数据都是同一种数据类型,可以通过非负整型数的元组来访问。维度的数量被称为数组的阶,数组的大小是一个由整型数构成的元组,可以描述数组不同维度上的大小。
我们可以从列表创建数组,然后利用方括号访问其中的元素:
Numpy
Numpy
另外还有以下方式创建初始数组


np.ones((m,n))
np.zeros((m,n))
np.eye(n)
np.full((m,n),k)
np.random.random((m,n))

访问数组

Numpy提供了多种访问数组的方法。其中切片语法是numpy数组中重要的一种数组访问方式。因为数组可以是多维的,所以你必须为每个维度指定好切片。如下所示。
Numpy
Numpy
当我们使用切片语法访问数组时,得到的总是原数组的一个子集。整型数组访问允许我们利用其它数组的数据构建一个新的数组。
Numpy
Numpy

数学计算

基本数学计算函数会对数组中元素逐个进行计算,既可以利用操作符重载,也可以使用函数方式。
Numpy
这儿一定要注意*是点乘,并不是矩阵乘,真正的矩阵乘如下所示。
Numpy

广播机制

广播是一种强有力的机制,它让Numpy可以让不同大小的矩阵在一起进行数学计算。我们常常会有一个小的矩阵和一个大的矩阵,然后我们会需要用小的矩阵对大的矩阵做一些计算。

对两个数组使用广播机制要遵守下列规则:

  1. 如果数组的秩不同,使用1来将秩较小的数组进行扩展,直到两个数组的尺寸的长度都一样。
  2. 如果两个数组在某个维度上的长度是一样的,或者其中一个数组在该维度上长度为1,那么我们就说这两个数组在该维度上是相容的。
  3. 如果两个数组在所有维度上都是相容的,他们就能使用广播。
  4. 如果两个输入数组的尺寸不同,那么注意其中较大的那个尺寸。因为广播之后,两个数组的尺寸将和那个较大的尺寸一样。
  5. 在任何一个维度上,如果一个数组的长度为1,另一个数组长度大于1,那么在该维度上,就好像是对第一个数组进行了复制。

具体细节需要的请查看官方文档:
https://docs.scipy.org/doc/numpy/reference/
参考博文:知乎-智能单元(https://zhuanlan.zhihu.com/p/20878530?refer=intelligentunit)