欢迎光临
我们一直在努力

Python NumPy入门指南:数据处理科学计算的瑞士军刀

作者:唐叔在学习 专栏:唐叔学python 标签:Python NumPy、数据分析、科学计算、机器学习基础、数组操作、Python数据处理、人工智能基础、Python编程

摘要

NumPy是Python科学计算的基础库,提供了高性能的多维数组对象和工具。本文唐叔将带你从零开始了解NumPy的核心概念、常用操作和实际应用场景,助你在数据分析、机器学习等领域快速上手。无论你是Python初学者还是想提升数据处理能力,这篇文章都将成为你的实用指南。

文章目录

    • 摘要
    • 一、NumPy是什么?为什么它如此重要?
    • 二、NumPy安装与基础使用
      • 2.1 安装NumPy
      • 2.2 导入NumPy
      • 2.3 创建第一个NumPy数组
    • 三、NumPy核心功能详解
      • 3.1 数组属性
      • 3.2 创建特殊数组
      • 3.3 数组索引与切片
      • 3.4 数组运算
      • 3.5 广播机制
    • 四、NumPy高级功能
      • 4.1 数组变形
      • 4.2 数组拼接与分割
      • 4.3 统计函数
    • 五、NumPy在实际项目中的应用
      • 5.1 图像处理
      • 5.2 机器学习数据预处理
      • 5.3 数值计算
    • 六、NumPy性能优化技巧
    • 七、总结

一、NumPy是什么?为什么它如此重要?

各位小伙伴们好,我是唐叔!今天我们要聊的是Python科学计算领域的一个重量级选手——NumPy。

简单来说,NumPy(Numerical Python)是Python中用于科学计算的基础包。它提供了一个强大的N维数组对象,以及用于处理这些数组的各种工具。可以说,NumPy是Python数据科学生态系统的基石,几乎所有的机器学习框架(如TensorFlow、PyTorch)和数据分析库(如Pandas)都建立在NumPy之上。

为什么NumPy这么受欢迎?主要有三大原因:

  • 性能强大:NumPy的底层是用C语言编写的,运算速度比纯Python快几个数量级
  • 接口简单:提供了大量简洁高效的数组操作函数
  • 生态完善:与SciPy、Matplotlib、Pandas等库完美配合
  • 二、NumPy安装与基础使用

    2.1 安装NumPy

    安装NumPy非常简单,使用pip命令即可:

    pip install numpy

    如果你使用的是Anaconda,它已经自带了NumPy,无需额外安装。

    2.2 导入NumPy

    按照惯例,我们通常这样导入NumPy:

    import numpy as np

    这样我们就可以用np作为前缀来调用NumPy的各种功能了。

    2.3 创建第一个NumPy数组

    让我们创建一个简单的数组来感受一下:

    import numpy as np

    # 创建一维数组
    arr1 = np.array([1, 2, 3, 4, 5])
    print(arr1)

    # 创建二维数组
    arr2 = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr2)

    输出结果:

    [1 2 3 4 5]
    [[1 2 3]
    [4 5 6]]

    三、NumPy核心功能详解

    3.1 数组属性

    每个NumPy数组都有一些重要的属性:

    arr = np.array([[1, 2, 3], [4, 5, 6]])

    print("数组维度:", arr.ndim) # 2
    print("数组形状:", arr.shape) # (2, 3)
    print("数组元素总数:", arr.size) # 6
    print("数组元素类型:", arr.dtype) # int32或int64

    3.2 创建特殊数组

    NumPy提供了多种创建特殊数组的方法:

    # 创建全零数组
    zeros = np.zeros((2, 3))

    # 创建全1数组
    ones = np.ones((3, 2))

    # 创建单位矩阵
    eye = np.eye(3)

    # 创建等差数列
    lin = np.linspace(0, 10, 5) # [ 0. 2.5 5. 7.5 10. ]

    # 创建随机数组
    rand = np.random.rand(2, 2)

    在这里插入图片描述

    3.3 数组索引与切片

    NumPy的索引和切片操作是数据处理的核心:

    arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

    # 获取单个元素
    print(arr[1, 2]) # 6

    # 获取一行
    print(arr[1]) # [4 5 6]

    # 获取一列
    print(arr[:, 1]) # [2 5 8]

    # 切片
    print(arr[0:2, 1:3])
    """
    [[2 3]
    [5 6]]
    """

    3.4 数组运算

    NumPy支持各种数学运算:

    a = np.array([1, 2, 3])
    b = np.array([4, 5, 6])

    # 加法
    print(a + b) # [5 7 9]

    # 乘法(元素级)
    print(a * b) # [4 10 18]

    # 点积
    print(np.dot(a, b)) # 32

    # 平方
    print(a**2) # [1 4 9]

    # 平方根
    print(np.sqrt(4)) # 2.0

    # 求和
    print(a.sum()) # 6.0

    # 均值
    print(a.mean()) # 2.0

    # 三角函数
    print(np.sin(a))

    常见的数组运算见下表:

    运算符号 / 函数例子
    逐元素加 + a + b
    逐元素乘 * a * b
    矩阵乘 @ 或 np.dot a @ b.T
    平方根 np.sqrt(a) 逐元素
    求和 a.sum() 或 a.sum(axis=0) 按列求和
    均值 a.mean()

    3.5 广播机制

    NumPy的广播机制是其强大功能之一:

    a = np.array([[1, 2, 3], [4, 5, 6]])
    b = np.array([10, 20, 30])

    # b会被广播到与a相同的形状
    print(a + b)
    """
    [[11 22 33]
    [14 25 36]]
    """

    四、NumPy高级功能

    4.1 数组变形

    arr = np.arange(6) # [0 1 2 3 4 5]

    # 改变形状
    print(arr.reshape(2, 3))
    """
    [[0 1 2]
    [3 4 5]]
    """

    # 展平数组
    print(arr.flatten()) # [0 1 2 3 4 5]

    4.2 数组拼接与分割

    a = np.array([[1, 2], [3, 4]])
    b = np.array([[5, 6]])

    # 垂直拼接
    print(np.vstack((a, b)))
    """
    [[1 2]
    [3 4]
    [5 6]]
    """

    # 水平拼接
    c = np.array([[7], [8]])
    print(np.hstack((a, c)))
    """
    [[1 2 7]
    [3 4 8]]
    """

    # 数组分割
    arr = np.arange(9).reshape(3, 3)
    print(np.hsplit(arr, 3)) # 分成3个数组

    4.3 统计函数

    NumPy提供了丰富的统计函数:

    data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

    print("平均值:", np.mean(data))
    print("中位数:", np.median(data))
    print("标准差:", np.std(data))
    print("最大值:", np.max(data))
    print("最小值:", np.min(data))
    print("每列的和:", np.sum(data, axis=0))
    print("每行的和:", np.sum(data, axis=1))

    在这里插入图片描述

    五、NumPy在实际项目中的应用

    NumPy 在实际项目中,由于其内置的大量函数,使其在图像处理、机器学习数据预处理、数据计算处理等场景都有广泛使用。可以不夸张的说:搞AI、搞数据,NumPy是地基!

    5.1 图像处理

    NumPy数组可以用来表示图像:

    from PIL import Image
    import matplotlib.pyplot as plt
    import numpy as np

    # 读取图像为NumPy数组
    img = np.array(Image.open('image.png'))

    # # 显示图像
    # plt.imshow(img)
    # plt.show()
    #
    # # 转换为灰度图
    # gray = np.mean(img, axis=2)
    # plt.imshow(gray, cmap='gray')
    # plt.show()

    fig, (ax1, ax2) = plt.subplots(1, 2)
    ax1.imshow(img)
    gray = np.mean(img, axis=2)
    ax2.imshow(gray, cmap='gray')
    plt.show()

    在这里插入图片描述

    5.2 机器学习数据预处理

    # 特征标准化
    data = np.random.rand(100, 5) # 100个样本,5个特征

    # 计算均值和标准差
    mean = np.mean(data, axis=0)
    std = np.std(data, axis=0)

    # 标准化
    normalized = (data mean) / std

    # 打乱数据顺序
    np.random.shuffle(normalized)

    5.3 数值计算

    # 解线性方程组
    A = np.array([[2, 1], [1, 3]])
    b = np.array([4, 5])
    x = np.linalg.solve(A, b) # [1.4, 1.2]

    # 计算特征值和特征向量
    eigenvalues, eigenvectors = np.linalg.eig(A)
    '''
    [[-0.85065081 -0.52573111]
    [ 0.52573111 -0.85065081]]
    '''

    六、NumPy性能优化技巧

  • 避免循环:尽量使用NumPy内置函数代替Python循环
  • 使用视图而非副本:切片操作返回的是视图,不会复制数据
  • 预分配内存:对于大型数组,先创建好再填充
  • 使用适当的数据类型:如np.float32比np.float64节省内存
  • import time
    import numpy as np

    n = 1_000_000

    # 不好的做法
    start = time.time()
    result = []
    for i in range(n):
    result.append(i**2)
    result = np.array(result)
    print("it cost: {}".format(time.time() start))

    # 好的做法
    start = time.time()
    result = np.arange(n)**2
    time.time()
    result = np.arange(n)**2
    print("it cost: {}".format(time.time() start))

    在这里插入图片描述

    七、总结

    NumPy作为Python科学计算的基石,提供了:

  • 高效的多维数组对象
  • 丰富的数学函数库
  • 强大的广播机制
  • 便捷的线性代数运算
  • 与其它科学计算库的良好兼容性
  • 掌握了NumPy,你就打开了Python数据科学的大门。无论是数据分析、机器学习还是科学计算,NumPy都是不可或缺的工具。希望这篇文章能帮助你快速上手NumPy,在数据处理的道路上越走越远!

    最后提醒:学习NumPy最好的方式就是多练习!打开你的Python环境,跟着示例代码敲一遍,感受NumPy的强大魅力吧!


    觉得有用的话,别忘了点赞收藏加关注!

    往期文章推荐:

    • Pandas – Python爬虫数据处理分析神器
    • Pandas – JSON格式数据操作实践
    • Matplotlib – Python图表可视化利器
    赞(0)
    未经允许不得转载:171主机测评 » Python NumPy入门指南:数据处理科学计算的瑞士军刀
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址