NumPy 数组迭代与合并详解

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: NumPy 数组迭代包括基本和高级方法。使用 `for` 循环可迭代一维、二维及多维数组。`np.nditer()` 提供更多控制,如迭代顺序、过滤、类型转换和步长。`np.ndenumerate()` 返回元素及其索引。练习涉及合并数组操作。

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

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

相关文章
|
16天前
|
并行计算 数据处理 开发者
NumPy高效数组操作与性能调优手册
NumPy是Python数据科学的基础库,以其高效的数组操作著称。本文深入探讨了NumPy的数组基础,如创建和操作数组,并介绍了向量化运算、避免Python循环等高效技巧。此外,文章还提出了性能优化策略,包括使用内置函数、并行计算、减少数据类型转换、使用视图及有效管理内存,以帮助开发者在处理大规模数据时充分利用NumPy的性能优势。通过这些策略,可以实现更高效、快速的数据处理。【6月更文挑战第10天】
27 4
|
13天前
|
BI 测试技术 索引
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-1
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
1月前
|
搜索推荐 索引 Python
【科学计算包NumPy】NumPy数组的基本操作
【科学计算包NumPy】NumPy数组的基本操作
48 3
|
10天前
|
Python
NumPy 是 Python 中的一个重要的科学计算包,其核心是一个强大的 N 维数组对象 Ndarray
【6月更文挑战第18天】NumPy的Ndarray是科学计算的核心,具有ndim(维度数)、shape(各维度大小)、size(元素总数)和dtype(数据类型)属性。方法包括T(转置)、ravel()(扁平化)、reshape()(改变形状)、astype()(转换数据类型)、sum()(求和)及mean()(计算平均值)。更多属性和方法如min/max等可在官方文档中探索。
31 5
|
6天前
|
机器学习/深度学习 C语言 索引
数组计算模块NumPy(一)
NumPy是Python科学计算的核心库,提供高性能的数组和矩阵操作,支持大量数学函数。它包括一维、二维到多维数组,并通过C实现,优化了计算速度。
数组计算模块NumPy(一)
|
10天前
|
Python
NumPy 是 Python 的一个强大的科学计算库,它允许你创建各种类型的数组
【6月更文挑战第18天】**NumPy**是Python的科学计算库,用于创建和操作多维数组。常用数组生成方法包括:`np.array()`从列表转换为数组;`np.zeros()`生成全零矩阵;`np.ones()`创建全一矩阵;`np.linspace()`产生等差序列;`np.arange()`创建等差数列;以及`np.eye()`生成对角线为1的二维数组。更多方法可查阅NumPy官方文档。
23 2
|
6天前
|
索引 Python
数组计算模块NumPy(二)
NumPy教程概要:介绍数组切片、二维数组索引、重塑、转置和数组操作。讨论了切片语法`[start:stop:step]`,二维数组的索引方式,以及reshape方法改变数组形状。涉及转置通过`.T`属性或`transpose()`函数实现,数组增加使用`hstack()`和`vstack()`,删除用`delete()`。还提到了矩阵运算,包括加减乘除,并展示了`numpy.dot()`和`@`运算符的使用。最后提到了排序函数`sort()`、`argsort()`和`lexsort()`,以及NumPy的统计分析函数如均值、标准差等。
|
13天前
|
存储 API C语言
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-2
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
14天前
|
Python
如何查询RGB图像的三维numpy数组中有多少个不同的RGB点,并打印具体数值?
如何查询RGB图像的三维numpy数组中有多少个不同的RGB点,并打印具体数值?
|
22天前
|
存储 数据处理 C语言
NumPy 通用函数(ufunc):高性能数组运算的利器
NumPy的通用函数(ufunc)提供高性能的逐元素运算,支持向量化操作和广播机制,能应用于数组的数学、逻辑和比较运算。ufunc可提高计算速度,避免低效的循环,并允许自定义函数以满足特定需求。例如,ufunc实现加法比循环更高效。通过`frompyfunc`可创建自定义ufunc。判断函数是否为ufunc,可检查其类型是否为`numpy.ufunc`。ufunc练习包括数组的平方、平方根、元素积及性能对比。
21 0

热门文章

最新文章