分享

必须要懂的机器学习和数据科学最流行的Python库——NumPy

 乘舟泛海赏雨 2020-05-02

NumPy是Numerical Python的简称,是Python的支持矢量运算的面向N维数组的一个运算库,目前在机器学习和数据科学领域被广泛使用,并且当前许多支持科学计算的工具包都是基于NumPy开发的,例如pandas,,scikit-learn,TensorFlow等。

NumPy最大的特点是其对象ndarray,其存储形式是N维的数组,我们可以将NumPy的1维数据看成是向量,多维数据看成是矩阵,可以把NumPy的计算看成是向量或矩阵运算,这点跟MATLAB特别相似。

说到数组,或许你可能有疑问了,Python本身就包含列表(list)和数组(array),为什么我们非要用NumPy而不用常规的Python数组呢?这主要是因为NumPy的算法库都是由C语言编写,可以直接操作内存,所以极大的提高了运行效率,一般基于NumPy的算法要比纯Python快10-100倍,并且占用的内存更少,可以说是既快又省。

必须要懂的机器学习和数据科学最流行的Python库——NumPy

基于NumPy的数据结构特点,本文主要从NumPy的一维数组(可以理解为向量)多维数组(可以理解为矩阵)2个方面进行介绍,以便于大家系统性的学习NumPy。

一维数组(向量)

  • 创建数组

最基本的方式是利用NumPy的array()函数通过列表创建数组。

必须要懂的机器学习和数据科学最流行的Python库——NumPy

在实际应用中,我们经常会用到一些已经初始化的数组,比如全0数组、全1数组、随机数组等等。NumPy也提供了相应的函数zeros()、ones()、random()等函数。

必须要懂的机器学习和数据科学最流行的Python库——NumPy

  • 数组运算

NumPy对于长度相等的一维数组的运算都会将运算应用到元素级,事实上就是向量的缩放、向量的加减法,需要注意的是两个数组相乘跟点积是不一样的。

必须要懂的机器学习和数据科学最流行的Python库——NumPy

  • 数组的索引和切片

NumPy对于一维数组的索引与Python中列表的索引没什么区别。

必须要懂的机器学习和数据科学最流行的Python库——NumPy

  • 聚合

NumPy中ndarray是一个对象,提供了许多聚合方法用于对象的操作,例如求最大值、最小值、均值等等。

必须要懂的机器学习和数据科学最流行的Python库——NumPy

多维数组(矩阵)

  • 创建矩阵

同一维数组类似,矩阵的创建既可以通过基本的列表操作实现,也可以用上面提到的初始化函数zeros()、ones()、random()等函数,只不过需要相应的增加维度。

必须要懂的机器学习和数据科学最流行的Python库——NumPy

  • 矩阵运算

NumPy中矩阵的加减运算同样将行列数相等的矩阵应用到元素级,NumPy有个很好的功能叫广播(broadcast ),既对于行列数不同的矩阵,只要有一个矩阵的行数或列数与另一个矩阵一致,并且是一个一维矩阵,那么2个矩阵在作运算时,NumPy会自动把那个一维矩阵补充成完整的多维矩阵。

必须要懂的机器学习和数据科学最流行的Python库——NumPy

必须要懂的机器学习和数据科学最流行的Python库——NumPy

  • 点积

NumPy提供了矩阵之间的点积运行函数dot(),可以直接计算矩阵的点积。

必须要懂的机器学习和数据科学最流行的Python库——NumPy

必须要懂的机器学习和数据科学最流行的Python库——NumPy

  • 索引和切片

同样的,矩阵的索引和切片与Python中2维数组类似,第一个维度对应于行,第二个维度对应于列,取多个元素可以用“:”。

必须要懂的机器学习和数据科学最流行的Python库——NumPy

必须要懂的机器学习和数据科学最流行的Python库——NumPy

  • 矩阵聚合

矩阵同样支持聚合操作,除了对所有值进行聚合,NumPy还支持对特定的轴进行聚合,axis=0(既0轴)表示对横轴进行操作,在计算上是沿着横轴方向一列一列计算;axis=1(既1轴)表示对纵轴进行操作,在计算上是沿着纵轴方向一行一行计算。

必须要懂的机器学习和数据科学最流行的Python库——NumPy

必须要懂的机器学习和数据科学最流行的Python库——NumPy

  • 矩阵变换

在线性代数中常常用到举证的变换,例如矩阵转置、矩阵重塑。NumPy提供了.T属性用于矩阵的转置,reshape()函数用于矩阵的重塑。

必须要懂的机器学习和数据科学最流行的Python库——NumPy

必须要懂的机器学习和数据科学最流行的Python库——NumPy

总结

NumPy在Python线性代数的运算中提供了非常好的数据结构,其ndarray对象拥有许多方便的方法和属性,并且其良好的运算性能也是纯Python不能替代的,所以在机器学习中NumPy是非常强大的存在,学好NumPy是机器学习实现各种算法的基础。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多