NumPy 数组迭代与合并详解

小万哥
• 阅读 315

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

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

点赞
收藏
评论区
推荐文章
Python进阶者 Python进阶者
2年前
Python矩阵和Numpy数组的那些事儿
大家好,我是IT共享者,人称皮皮。今天给大家介绍矩阵和NumPy数组。一、什么是矩阵?使用嵌套列表和NumPy包的Python矩阵。矩阵是一种二维数据结构,其中数字按行和列排列。二、Python矩阵1\.列表视为矩阵Python没有矩阵的内置类型。但是,可以将列表的列表视为矩阵。例:A2\.如何使用嵌套列表。A三、NumPy数组1\.
Wesley13 Wesley13
2年前
java 基础知识
遍历遍历就是把这个数组的每个元素显示出来遍历的方法就是先定义这个数组的大小,然后用FOR循环来完成数组,例如doublescorenewdouble5;ScannerinputnewScanner(System.in);for(inti0;i<score.l
Stella981 Stella981
2年前
JavaScript中遍历数组和对象的方法
js数组遍历和对象遍历针对js各种遍历作一个总结分析,从类型用处,分析数组和对象各种遍历使用场景,优缺点等JS数组遍历:1,普通for循环,经常用的数组遍历vararr1,2,0,3,9,10,20,
小万哥 小万哥
2个月前
NumPy 数组创建方法与索引访问详解
NumPy创建数组NumPy中的核心数据结构是ndarray,它代表多维数组。NumPy提供了多种方法来创建ndarray对象,包括:使用array()函数array()函数是最常用的方法之一,它可以将Python列表、元组甚至其他数组转换为ndarray
小万哥 小万哥
2个月前
NumPy 数组切片及数据类型介绍
NumPy数组切片NumPy数组切片用于从数组中提取子集。它类似于Python中的列表切片,但支持多维数组。一维数组切片要从一维数组中提取子集,可以使用方括号并指定切片。切片由起始索引、结束索引和可选步长组成,用冒号:分隔。语法:pythonarrs
小万哥 小万哥
2个月前
NumPy 数组复制与视图详解
NumPy数组的复制与视图NumPy数组的复制和视图是两种不同的方式来创建新数组,它们之间存在着重要的区别。复制复制会创建一个包含原始数组相同元素的新数组,但这两个数组拥有独立的内存空间。这意味着对复制进行的任何更改都不会影响原始数组,反之亦然。创建副本可
小万哥 小万哥
2个月前
NumPy 分割与搜索数组详解
NumPy分割数组NumPy提供了np.arraysplit()函数来分割数组,将一个数组拆分成多个较小的子数组。基本用法语法:pythonnp.arraysplit(array,indicesorsections,axisNone)array:要分割的N
小万哥 小万哥
2个月前
NumPy 数组排序、过滤与随机数生成详解
NumPy数组排序排序数组排序数组意味着将元素按特定顺序排列。顺序可以是数字大小、字母顺序、升序或降序等。NumPy的ndarray对象提供了一个名为sort()的函数,用于对数组进行排序。示例:pythonimportnumpyasnparrnp.arr
小万哥 小万哥
9个月前
Python 数组和列表:创建、访问、添加和删除数组元素
Python没有内置支持数组,但可以使用Python列表来代替。数组本页将向您展示如何使用列表作为数组,但要在Python中使用数组,您需要导入一个库,比如NumPy库。数组用于在一个变量中存储多个值:示例,创建一个包含汽车名称的数组:Pythoncars
小万哥 小万哥
2个月前
学会使用 NumPy:基础、随机、ufunc 和练习测试
NumPyNumPy是一个用于处理数组的Python库。它代表“NumericalPython”。基本随机ufunc通过测验测试学习检验您对NumPy的掌握程度。通过练习学习NumPy练习练习:请插入创建NumPy数组的正确方法。pythonarrnp.(