写点什么

NumPy 数组迭代与合并详解

作者:EquatorCoco
  • 2024-05-15
    福建
  • 本文字数:2123 字

    阅读完需:约 7 分钟

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 参数可以指定迭代过程中元素的数据类型。使用步长:axes 和 step 参数可以用于指定迭代步长。


示例:

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 的正确方法,将以下数组 arr1 和 arr2 合并成一个新数组。

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


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


文章转载自:小万哥丶

原文链接:https://www.cnblogs.com/xiaowange/p/18192255

体验地址:http://www.jnpfsoft.com/?from=infoq

用户头像

EquatorCoco

关注

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
NumPy 数组迭代与合并详解_Python_EquatorCoco_InfoQ写作社区