当前位置:  首页>> 技术小册>> Python机器学习基础教程(上)

1.4.2 NumPy:Python机器学习的基石

在深入探讨Python机器学习之前,掌握NumPy这一强大的科学计算库是至关重要的。NumPy(Numerical Python的简称)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。对于机器学习项目而言,NumPy几乎是不可或缺的,因为它极大地简化了数据预处理、特征工程以及模型训练过程中的数学运算。本节将详细介绍NumPy的基本概念、数组操作、数学函数以及如何在机器学习项目中高效利用NumPy。

1.4.2.1 NumPy基础概念

数组(Array):NumPy的核心数据结构是ndarray(N-dimensional array),即N维数组。与Python原生列表(list)相比,ndarray在存储效率和性能上有显著提升,尤其是在处理大型数据集时。ndarray中的元素类型必须一致,这保证了操作的统一性和高效性。

数据类型(Data Types):NumPy支持多种数据类型,如整型(int)、浮点型(float)、复数型(complex)等。在创建ndarray时,可以指定数据类型,以优化内存使用和计算速度。

形状(Shape):ndarray的形状是一个元组,表示各维度上元素的数量。例如,形状为(3, 4)的二维数组表示有3行4列。

1.4.2.2 数组创建

NumPy提供了多种创建数组的方法,包括但不限于以下几种:

  • numpy.array():从常规Python列表、元组等创建数组。
  • numpy.zeros():创建指定形状和类型,元素全为0的数组。
  • numpy.ones():创建指定形状和类型,元素全为1的数组。
  • numpy.full():创建指定形状、类型和填充值的数组。
  • numpy.arange():根据起始值、结束值和步长创建一维数组。
  • numpy.linspace():在指定的间隔内返回均匀间隔的数字。
  • numpy.random.rand()numpy.random.randn()等:生成随机数组。

1.4.2.3 数组操作

NumPy提供了丰富的数组操作方法,使得数据处理变得简单高效。

  • 索引与切片:类似于Python列表,但支持多维索引和切片。
  • 广播(Broadcasting):是NumPy中用于处理不同形状数组之间运算的强大机制。当进行算术运算时,NumPy会尝试自动扩展较小数组的形状,以便与较大数组的形状相匹配。
  • 数组重塑(Reshape):不改变数组元素,仅改变其形状。
  • 数组转置(Transpose):交换数组的轴。
  • 数组拼接与分割:使用numpy.concatenate()numpy.vstack()numpy.hstack()等函数拼接数组,使用numpy.split()numpy.hsplit()numpy.vsplit()等函数分割数组。

1.4.2.4 数学函数

NumPy提供了大量的数学函数,支持数组中的元素级运算。

  • 基本数学运算:如加法(+)、减法(-)、乘法()、除法(/)、幂运算(*)等。
  • 聚合函数:如numpy.sum()(求和)、numpy.mean()(均值)、numpy.std()(标准差)、numpy.max()(最大值)、numpy.min()(最小值)等,这些函数可以沿着指定轴进行运算。
  • 三角函数:如numpy.sin()numpy.cos()numpy.tan()等。
  • 逻辑函数:如numpy.logical_and()numpy.logical_or()numpy.logical_not()等,用于数组元素间的逻辑运算。
  • 矩阵运算:NumPy也支持基本的矩阵运算,如numpy.dot()用于矩阵乘法,numpy.linalg.inv()用于求逆矩阵等。

1.4.2.5 NumPy在机器学习中的应用

在机器学习中,NumPy的应用无处不在。以下是几个典型场景:

  1. 数据预处理:使用NumPy进行数据的清洗、转换、归一化等操作,为模型训练准备高质量的数据集。
  2. 特征工程:构建新特征、选择重要特征、进行特征缩放等,NumPy提供了高效的数据操作能力。
  3. 模型训练:虽然高级库如scikit-learn、TensorFlow等封装了更复杂的机器学习算法,但在这些算法内部,NumPy仍然扮演着基础计算的角色。
  4. 性能优化:利用NumPy的向量化操作,可以显著提高数据处理和计算的速度,减少代码量,提高可读性。

1.4.2.6 实战演练

以下是一个简单的实战示例,展示如何使用NumPy进行数据处理和简单的数学运算。

  1. import numpy as np
  2. # 创建一个一维数组
  3. arr_1d = np.array([1, 2, 3, 4, 5])
  4. # 创建一个二维数组
  5. arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
  6. # 数组运算
  7. result_add = arr_2d + 10 # 元素级加法
  8. result_mean = np.mean(arr_2d, axis=0) # 沿着第0轴(列)计算均值
  9. # 索引与切片
  10. first_row = arr_2d[0, :] # 获取第一行
  11. # 数组重塑
  12. arr_reshaped = arr_2d.reshape((1, 9)) # 将3x3的二维数组重塑为1x9的二维数组
  13. # 广播
  14. arr_broadcast = arr_1d + arr_2d # 这里会触发广播机制,尝试匹配两个数组的形状
  15. print("加法结果:", result_add)
  16. print("均值结果:", result_mean)
  17. print("第一行:", first_row)
  18. print("重塑后数组:", arr_reshaped)
  19. # 注意:arr_broadcast 的打印结果取决于NumPy的广播规则,可能不是直观的形状

结语

NumPy作为Python机器学习的基石,其重要性不言而喻。掌握NumPy的基本概念和操作方法,不仅能够提升数据处理和数学计算的效率,还能为后续的机器学习项目打下坚实的基础。通过不断实践和探索,你将能更深入地理解NumPy的强大功能,并在实际项目中灵活运用。


该分类下的相关小册推荐: