NumPy 数组迭代与合并详解

NumPy 数组迭代

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

基本迭代

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

一维数组迭代:

python 复制代码
import numpy as np

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

for element in arr:
    print(element)

二维数组迭代:

python 复制代码
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)

多维数组迭代:

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

python 复制代码
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 参数可以用于指定迭代步长。

示例:

python 复制代码
import numpy as np

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

# 迭代每个元素,并将其转换为字符串
for element in np.nditer(arr, op_dtypes=['S']):
    print(element)

示例:

python 复制代码
import numpy as np

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

# 迭代行,跳过第一个元素
for row in np.nditer(arr[:, 1:], flags=['slicing']):
    print(row)

示例:

python 复制代码
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() 函数将每个元素与其索引一起返回。

示例:

python 复制代码
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() 函数用于沿指定轴连接多个数组。

语法:

python 复制代码
np.concatenate((arr1, arr2, ..., arrN), axis=None)

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

示例:

python 复制代码
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() 函数用于沿新轴堆叠多个数组。

语法:

python 复制代码
np.stack((arr1, arr2, ..., arrN), axis=None)

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

示例:

python 复制代码
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():沿第三轴(深度)堆叠数组。

示例:

python 复制代码
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 合并成一个新数组。

python 复制代码
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,关注后即可获取最新文章推送

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

相关推荐
__lost11 分钟前
Python图像变清晰与锐化,调整对比度,高斯滤波除躁,卷积锐化,中值滤波钝化,神经网络变清晰
python·opencv·计算机视觉
Harbor Lau11 分钟前
Linux常用中间件命令大全
linux·运维·中间件
海绵波波10716 分钟前
玉米产量遥感估产系统的开发实践(持续迭代与更新)
python·flask
花生了什么树lll20 分钟前
面试中被问到过的前端八股(四)
前端·面试
海底火旺21 分钟前
破解二维矩阵搜索难题:从暴力到最优的算法之旅
javascript·算法·面试
逢生博客1 小时前
使用 Python 项目管理工具 uv 快速创建 MCP 服务(Cherry Studio、Trae 添加 MCP 服务)
python·sqlite·uv·deepseek·trae·cherry studio·mcp服务
꧁坚持很酷꧂1 小时前
Linux Ubuntu18.04下安装Qt Craeator 5.12.9(图文详解)
linux·运维·qt
堕落似梦1 小时前
Pydantic增强SQLALchemy序列化(FastAPI直接输出SQLALchemy查询集)
python
丘山子1 小时前
如何在 1000 亿级数据规模下实现高效的去重统计?
后端·面试·架构
凉、介1 小时前
PCI 总线学习笔记(五)
android·linux·笔记·学习·pcie·pci