• NumPy 数组迭代与合并详解


    NumPy 数组迭代

    NumPy 数组迭代是访问和处理数组元素的重要方法。它允许您逐个或成组地遍历数组元素。

    基本迭代

    我们可以使用 Python 的基本 for 循环来迭代 NumPy 数组。

    一维数组迭代:

    import numpy as np
    arr = np.array([1, 2, 3, 4, 5])
    for element in arr:
    print(element)

    二维数组迭代:

    import numpy as np
    arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    for row in arr:
    for element in row:
    print(element)

    多维数组迭代:

    对于更高维度的数组,我们可以使用嵌套循环来迭代每个维度。

    import numpy as np
    arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
    for cube in arr:
    for row in cube:
    for element in row:
    print(element)

    使用 nditer() 进行高级迭代

    NumPy 提供了 np.nditer() 函数,用于更复杂的迭代操作。它允许您:

    指定迭代顺序:order 参数可以是 'C'(行优先)或 'F'(列优先)。
    过滤元素:flags 参数可以包含 'filtering''slicing' 等标志,用于过滤元素。
    转换数据类型:op_dtypes 参数可以指定迭代过程中元素的数据类型。
    使用步长:axesstep 参数可以用于指定迭代步长。

    示例:

    import numpy as np
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    # 迭代每个元素,并将其转换为字符串
    for element in np.nditer(arr, op_dtypes=['S']):
    print(element)

    示例:

    import numpy as np
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    # 迭代行,跳过第一个元素
    for row in np.nditer(arr[:, 1:], flags=['slicing']):
    print(row)

    示例:

    import numpy as np
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    # 迭代列,每隔一个元素
    for column in np.nditer(arr[:, ::2], flags=['slicing']):
    print(column)

    使用 ndenumerate() 进行枚举迭代

    np.ndenumerate() 函数将每个元素与其索引一起返回。

    示例:

    import numpy as np
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    for (row_idx, col_idx), element in np.ndenumerate(arr):
    print(f"({row_idx}, {col_idx}): {element}")

    练习

    使用 NumPy 数组迭代完成以下任务:

    1. 创建一个 3x3 的二维数组,并打印每个元素。
    2. 创建一个 5x5x5 的三维数组,并打印每个元素的坐标和值。
    3. 创建一个 10 个元素的一维数组,并计算数组元素的平均值。
    4. 创建一个 2x2 的二维数组,并将其转置(行列互换)。
    5. 创建一个 3x4 的二维数组,并沿第 1 轴(行)堆叠两个这样的数组。

    在评论中分享您的代码和输出。

    Sure, here is the requested Markdown formatted content:

    NumPy 合并数组

    NumPy 提供了多种函数来合并数组,用于将多个数组的内容连接成一个新数组。

    合并数组

    np.concatenate() 函数用于沿指定轴连接多个数组。

    语法:

    np.concatenate((arr1, arr2, ..., arrN), axis=None)

    arr1, arr2, ..., arrN: 要合并的数组。
    axis: 指定连接的轴。默认为 0。

    示例:

    import numpy as np
    arr1 = np.array([1, 2, 3])
    arr2 = np.array([4, 5, 6])
    # 合并两个一维数组
    arr = np.concatenate((arr1, arr2))
    print(arr) # 输出: [1 2 3 4 5 6]
    # 沿行合并两个二维数组
    arr1 = np.array([[1, 2], [3, 4]])
    arr2 = np.array([[5, 6], [7, 8]])
    arr = np.concatenate((arr1, arr2), axis=1)
    print(arr) # 输出: [[ 1 2 5 6]
    # [ 3 4 7 8]]

    堆叠数组

    np.stack() 函数用于沿新轴堆叠多个数组。

    语法:

    np.stack((arr1, arr2, ..., arrN), axis=None)

    arr1, arr2, ..., arrN: 要堆叠的数组。
    axis: 指定堆叠的轴。默认为 0。

    示例:

    import numpy as np
    arr1 = np.array([1, 2, 3])
    arr2 = np.array([4, 5, 6])
    # 沿第二轴堆叠两个一维数组
    arr = np.stack((arr1, arr2), axis=1)
    print(arr) # 输出: [[1 4]
    # [2 5]
    # [3 6]]
    # 沿行堆叠
    arr1 = np.array([[1, 2], [3, 4]])
    arr2 = np.array([[5, 6], [7, 8]])
    arr = np.stack((arr1, arr2), axis=0)
    print(arr) # 输出: [[1 2]
    # [3 4]
    # [5 6]
    # [7 8]]

    辅助函数

    NumPy 提供了一些辅助函数来方便常见轴上的堆叠操作:

    np.hstack():沿水平方向(行)堆叠数组。
    np.vstack():沿垂直方向(列)堆叠数组。
    np.dstack():沿第三轴(深度)堆叠数组。

    示例:

    import numpy as np
    arr1 = np.array([1, 2, 3])
    arr2 = np.array([4, 5, 6])
    # 沿行堆叠
    arr = np.hstack((arr1, arr2))
    print(arr) # 输出: [1 2 3 4 5 6]
    # 沿列堆叠
    arr = np.vstack((arr1, arr2))
    print(arr) # 输出: [[1 4]
    # [2 5]
    # [3 6]]

    练习

    使用 NumPy 的正确方法,将以下数组 arr1arr2 合并成一个新数组。

    import numpy as np
    arr1 = np.array([1, 2, 3])
    arr2 = np.array([4, 5, 6])
    # 期望输出: [1 4 2 5 3 6]

    在评论中分享您的代码和输出。

    最后

    为了方便其他设备和平台的小伙伴观看往期文章:

    微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

    看完如果觉得有帮助,欢迎点赞、收藏、关注

  • 相关阅读:
    Linux虚拟机中网络连接的三种方式
    网络安全--APT技术、密码学
    Selenium安装报错:No matching distribution found for selenium。经个人尝试,问题已得到解决
    Middleware ❀ Kafka功能与使用详解
    10个有趣的Python高级脚本,建议收藏 ~
    原理图与 PCB 绘制备忘
    自动化测试中,测试数据与脚本分离以及参数化方法
    BYD精制项目除铜工艺去除铜离子
    FFMPEG常用的一些命令介绍:音频录制、视频录制
    python LeetCode 刷题记录 69
  • 原文地址:https://www.cnblogs.com/xiaowange/p/18192255