NumPy库是Python库中用于数据分析,机器学习,科学计算的一个主力,它极大地简化了向量和矩阵的操作和处理。Python的一些主要软件包依赖于NumPy作为其架构的基础部分,比如scikit-learn, SciPy, pandas以及 tensorflow。
在这篇文章中,我们将介绍一些使用NumPy的主要方法,以及在我们为机器学习模型提供服务之前它如何表示不同类型的数据(表格,图像,文本等)。
import numpy as np
1.创建数组
我们可以通过将Python列表传递给它并使用np.array()来创建一个NumPy数组(也就是强大的ndarray)。在这种情况下,Python创建了我们在右边可以看到的数组:
很多情况下,我们希望NumPy为我们初始化数组的值。NumPy为这些情况提供了诸如ones(),zeros()和random.random()之类的方法。我们只需要传递它们要生成的元素数量:
待我们创建了数组,我们便可以开始以有趣的方式操作它们。
2.数组算术
让我们创建两个NumPy数组来展示它们的用处。我们把两个数组分别叫作data,ones
:
使他们每行对应元素相加,只需data + ones
:
当开始学习这些工具时,我们会发现这样的抽象让我们不必在循环中编写这样的计算。这是一个很棒的抽象,可以让你在更高层次上思考问题。
其他运算方式的补充:
通常情况下,我们希望在数组和单个数字之间执行操作(我们也可以将其称为向量和标量之间的操作)。比如说,我们的数组表示以英里为单位的距离,我们希望将其转换为公里数。我们简单地说data * 1.6
:
NumPy中这种操作意味着每个元素都会发生相乘,这个概念叫做广播,它非常有用。
3.索引
我们可以通过Python列表切片的所有方式对NumPy数组进行索引和切片:
4.聚合
NumPy为我们提供的其他好处是聚合功能:
除了 min,max,sum,还有许多类似的功能,比如求平均值的mean,获得所有元素乘积的prod,获得标准差的std,还有其他。
更多功能
以上我们看到的所有例子都在一个维度上处理向量。NumPy的优势的一个关键部分是它能够将我们目前所看到的所有内容应用到任意数量的维度。
5.创建矩阵
我们可以传递以下形状的Python列表列表,让NumPy创建一个矩阵来表示它们:
np.array([[1,2],[3,4]])
我们也可以使用上面提到的相同方法(ones()
,zeros()
和random.random()
),只要我们给它们一个元组来描述我们正在创建的矩阵的维度:
6.矩阵算术
+-*/
如果两个矩阵的大小相同,我们可以使用算术运算符()来添加和乘以矩阵。NumPy将这些作为位置操作处理:
只有当不同维度为1时(例如矩阵只有一列或一行),我们才能在不同大小的矩阵上进行这些算术运算,在这种情况下,NumPy将其广播规则用于该操作:
7.点积
与算术相关的一个关键区别是使用点积的矩阵乘法。NumPy为每个矩阵提供了一种dot()
方法,可用于与其他矩阵进行点积运算:
图的底部添加了矩阵尺寸,以强调两个矩阵在它们彼此面对的一侧必须具有相同的尺寸(矩阵乘法必须的特征)。您可以将此操作可视化为如下所示:
8.矩阵索引
当我们操作矩阵时,索引和切片操作变得更加有用:
9.矩阵聚合
我们可以像聚合向量一样聚合矩阵:
我们不仅可以聚合矩阵中的所有值,还可以使用以下axis
参数在行或列之间进行聚合:
10.转置和重塑
处理矩阵时的一个共同需求是需要旋转矩阵。当我们需要采用两个矩阵的点积并需要对齐它们共享的维度时,通常就是这种情况。NumPy数组有一个方便的属性,T
用于获取矩阵的转置:
在更高级的用例中,您可能会发现自己需要切换某个矩阵的维度。在机器学习应用程序中通常就是这种情况,其中某个模型期望输入的某个形状与您的数据集不同。NumPy的reshape()
方法在这些情况下很有用。您只需将矩阵所需的新尺寸传递给它即可。您可以为维度传递-1,NumPy可以根据您的矩阵推断出正确的维度:
11.更多维度
NumPy可以完成我们在任何维度上提到的所有内容。其中心数据结构称为ndarray(N维数组),原因很简单。
在很多方面,处理新维度只是在NumPy函数的参数中添加逗号:
12.实用场景
公式
实现适用于矩阵和向量的数学公式是考虑NumPy的关键用例。这就是为什么NumPy是Python科学计算社区的宠儿。例如,考虑均方误差公式,它是监督机器学习模型处理回归问题的核心:
在NumPy中实现这一点是轻而易举的:
这样做的好处是,numpy能妥善应对,即便predictions
与labels
含有一个或一千值(只要他们都是相同的大小)。我们可以通过一个示例逐步执行该代码行中的四个操作:
预测值和标签向量都包含三个值。这意味着n的值为3。在我们执行减法后,我们最终得到如下值:
然后我们可以对矢量中的值进行平方:
现在我们总结这些值:
这就是预测误差值与模型评价得分。
参考文章:https://jalammar.github.io/visual-numpy/