机器学习最底层库Numpy的70个知识点,刷爆!
内容提要
本文介绍了NumPy库的基本知识点,包括创建数组、数组操作、数组运算等。通过示例代码演示了如何创建不同类型的数组,以及如何进行数组的切片、定位、修改、排序等操作。同时还介绍了数组的数学运算,如相加、相减、相乘、相除等,以及数组的统计特征,如最大值、最小值、均值等。此外,还介绍了数组的转置、展平、拼接、拆分等操作,以及数组的逆、行列式、特征值-特征向量、QR分解、SVD分解等高级操作。最后还介绍了如何提取数组元素的整数部分,以及空值和无穷值的特性。
延伸解读
数组创建:注意默认数据类型差异
文中对比了np.zeros(5)和np.array([0,0,0,0,0]),前者默认生成float64,后者为int32。这种差异可能影响后续运算和内存占用。使用np.zeros_like或np.ones_like可保持形状和类型一致,避免意外类型转换。
数组运算:区分点乘与内积
文章展示了np.dot、@、np.inner和np.outer等运算。np.dot和@执行矩阵乘法,要求前者的列数等于后者的行数;np.inner要求形状相同,计算内积;np.outer计算外积。理解这些区别对正确实现算法很重要。
高级线性代数:矩阵分解的用途
文中介绍了逆、行列式、特征值、QR分解和SVD分解。这些是许多机器学习算法的底层操作,例如SVD用于降维,特征值用于PCA。注意np.linalg.inv要求方阵,且数值不稳定时可能出错。
特殊值处理:NaN和Inf的陷阱
文章指出NaN不等于自身,且与Inf比较均返回False。运算中0*np.nan和0*np.inf都得到nan,np.inf - np.inf也是nan。处理数据时需用np.isnan和np.isinf检测,避免逻辑错误。
Q&A
NumPy库的主要特点是什么?
NumPy库擅长数值计算,支持矢量化运算,并且是免费和开源的。
如何创建一个全0的二维数组?
可以使用np.zeros((5,5))来创建一个5x5的全0二维数组。
NumPy中如何进行数组的数学运算?
NumPy支持数组的相加、相减、相乘和相除等数学运算。
如何提取数组元素的整数部分?
可以使用A - A % 1或A.astype(int)来提取数组元素的整数部分。
NumPy如何处理空值和无穷值?
在NumPy中,空值用np.nan表示,无穷值用np.inf表示,且0乘以空值或无穷值仍然是空值。
如何创建等差数列的数组?
可以使用np.arange(start, stop, step)来创建等差数列的数组。