NumPy教程

栏目: numpy 发布时间:2024-12-02

NumPy(Numerical Python)是Python编程语言的一个扩展库,它提供了大量的数学函数和操作数组(特别是多维数组)的方法。NumPy是科学计算中不可或缺的一个工具,广泛应用于数据分析、机器学习、科学计算等领域。本教程将带您逐步了解NumPy的基础知识和常用功能。

一、NumPy的安装与导入

在使用NumPy之前,需要先确保它已经安装在您的Python环境中。您可以使用pip命令来安装NumPy:

pip install numpy

安装完成后,您可以在Python脚本或交互式环境中导入NumPy库:

import numpy as np

二、NumPy数组基础

NumPy的核心是ndarray对象,它是一个快速而灵活的大数据集容器。

  1. 创建数组

    • 使用np.array函数:

      arr = np.array([1, 2, 3, 4, 5])
      print(arr)
      
    • 使用np.zerosnp.ones创建全0或全1数组:

      zeros_arr = np.zeros((2, 3))  # 创建一个2x3的全0数组
      ones_arr = np.ones((2, 3))    # 创建一个2x3的全1数组
      
    • 使用np.linspace创建等差数列:

      linspace_arr = np.linspace(0, 10, 5)  # 创建一个从0到10的等差数列,包含5个数
      
    • 使用np.arange创建类似Python range的数组:

      arange_arr = np.arange(0, 10, 2)  # 创建一个从0到8(不包括10),步长为2的数组
      
  2. 数组的形状与维度

    • 使用.shape属性查看数组的形状:

      print(arr.shape)  # 对于一维数组,输出类似(n,)的元组
      print(zeros_arr.shape)  # 对于二维数组,输出类似(m, n)的元组
      
    • 使用.ndim属性查看数组的维度:

      print(arr.ndim)  # 输出数组的维度数
      
  3. 数组的数据类型

    • NumPy数组中的元素可以是不同类型的数据,但每个数组中的所有元素类型必须相同。

    • 使用.dtype属性查看数组的数据类型:

      print(arr.dtype)  # 默认会根据输入数据自动推断数据类型
      
    • 可以在创建数组时指定数据类型:

      dtype_arr = np.array([1, 2, 3], dtype=np.float64)
      print(dtype_arr.dtype)
      

三、NumPy数组操作

  1. 数组索引与切片

    NumPy数组的索引和切片操作与Python列表类似,但支持多维索引。

    print(arr[2])  # 访问一维数组中的第三个元素
    print(zeros_arr[1, 2])  # 访问二维数组中的(1, 2)位置的元素
    print(arr[1:4])  # 切片操作,获取一维数组中的第2到第4个元素(不包含第4个)
    
  2. 数组数学运算

    NumPy支持数组间的数学运算,这些运算会逐元素进行。

    arr1 = np.array([1, 2, 3])
    arr2 = np.array([4, 5, 6])
    print(arr1 + arr2)  # 对应元素相加
    print(arr1 * arr2)  # 对应元素相乘
    print(np.sin(arr1))  # 对数组中的每个元素应用sin函数
    
  3. 数组统计与聚合

    NumPy提供了丰富的统计函数,如求和、平均值、最大值、最小值等。

    print(np.sum(arr))  # 求和
    print(np.mean(arr))  # 平均值
    print(np.max(arr))  # 最大值
    print(np.min(arr))  # 最小值
    print(np.std(arr))  # 标准差
    
  4. 数组重塑与广播

    • 重塑数组:使用.reshape方法可以改变数组的形状。

      reshaped_arr = arr.reshape((5, 1))  # 将一维数组重塑为5x1的二维数组
      
    • 广播:NumPy支持广播机制,允许在不同形状的数组之间进行数学运算。

      arr3 = np.array([[1], [2], [3]])
      print(arr + 10)  # 将数组arr中的每个元素加10,即使10是一个标量
      print(arr3 + arr)  # arr3是3x1的数组,arr是1x5的数组(在广播后视为3x5),对应元素相加
      

四、NumPy的高级功能

  1. 线性代数

    NumPy提供了线性代数相关的函数,如矩阵乘法、矩阵分解等。

    A = np.array([[1, 2], [3, 4]])
    B = np.array([[5, 6], [7, 8]])
    print(np.dot(A, B))  # 矩阵乘法
    print(np.linalg.inv(A))  # 矩阵求逆
    
  2. 随机数生成

    NumPy的random模块提供了多种随机数生成函数。

    print(np.random.rand(3, 3))  # 生成一个3x3的随机数组,元素在[0, 1)之间
    print(np.random.randn(3, 3))  # 生成一个3x3的随机数组,元素服从标准正态分布
    print(np.random.randint(0, 10, (3, 3)))  # 生成一个3x3的随机整数数组,元素在[0, 10)之间
    
  3. 文件读写

    NumPy支持从文本文件或二进制文件中读写数组数据。

    # 保存到文本文件
    np.savetxt('array.txt', arr, delimiter=',')
    
    # 从文本文件读取
    loaded_arr = np.loadtxt('array.txt', delimiter=',')
    print(loaded_arr)
    

五、总结

NumPy是一个功能强大的科学计算库,它提供了高效的数组操作和数据处理能力。通过掌握NumPy的基础知识和常用功能,您可以更高效地处理和分析数据。本教程仅涵盖了NumPy的一部分内容,建议您进一步阅读NumPy的官方文档或相关书籍,以深入了解NumPy的高级功能和最佳实践。

本文地址:https://www.tides.cn/p_numpy-tutorial