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
参数可以指定迭代过程中元素的数据类型。
使用步长: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 数组迭代完成以下任务:
- 创建一个 3x3 的二维数组,并打印每个元素。
- 创建一个 5x5x5 的三维数组,并打印每个元素的坐标和值。
- 创建一个 10 个元素的一维数组,并计算数组元素的平均值。
- 创建一个 2x2 的二维数组,并将其转置(行列互换)。
- 创建一个 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]
在评论中分享您的代码和输出。
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding
,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎点赞、收藏、关注
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
2023-05-14 C++ 中的可移植性和跨平台开发