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

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

NumPy 数组迭代与合并详解的更多相关文章

  1. GoLang基础数据类型--->数组(array)详解

    GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...

  2. NumPy 数组迭代

    章节 Numpy 介绍 Numpy 安装 NumPy ndarray NumPy 数据类型 NumPy 数组创建 NumPy 基于已有数据创建数组 NumPy 基于数值区间创建数组 NumPy 数组切 ...

  3. 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解

    数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...

  4. Day17:稀疏数组的超细详解

    稀疏数组的超细详解 一个含有大量重复元素的二维数组,我们可以提取其有效元素,压缩空间,整合为一个稀疏数组. 例如一个五子棋棋盘,我们将棋盘看作为一个二维数组,没有棋子的位置为0:黑棋为1:白棋为2: ...

  5. numpy 数组迭代Iterating over arrays

    在numpy 1.6中引入的迭代器对象nditer提供了许多灵活的方式来以系统的方式访问一个或多个数组的所有元素. 1 单数组迭代 该部分位于numpy-ref-1.14.5第1.15 部分Singl ...

  6. dsu on tree (树上启发式合并) 详解

    一直都没出过算法详解,昨天心血来潮想写一篇,于是 dsu on tree 它来了 1.前置技能 1.链式前向星(vector 建图) 2.dfs 建树 3.剖分轻重链,轻重儿子 重儿子 一个结点的所有 ...

  7. 以np.concatenate为主题,谈谈numpy数组按维度合并的问题

    1.引言 最近在做多模态融合的图像问题,其中最需要解决的就是不同模态的图像用什么方法进行融合,最简单也最直观的方法就是采用合并数组的方法,将不同模态的图像合并为多通道进行处理.在一些论文中,比如< ...

  8. JavaScript入门之数组:Array类型详解

    数组应该是每个语言中都用得极度频繁的数据类型,JavaScript也不例外. 个人认为,Js中的Array类型非常强大. 首先没有C/C++等语言需要在数组初始化时指定数组长度(并不可变)的要求. 也 ...

  9. numpy函数:[6]arange()详解

    arange函数用于创建等差数组,使用频率非常高,arange非常类似range函数,会python的人肯定经常用range函数,比如在for循环中,几乎都用到了range,下面我们通过range来学 ...

  10. numpy 介绍和基础使用详解

    NUMPY INTRODUCTION NUMPY 提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于处理多维数组,用于储存和处理大型矩阵,本身是由C语言开发,比python自身的列表 ...

随机推荐

  1. #Tarjan,SPFA#洛谷 3627 [APIO2009] 抢掠计划

    题目 分析 首先重复走,钱只会计算一次,而且与路程长度无关,考虑有向图缩点,然后跑最长路,这里吧边权取反跑最短路,然后在酒吧结束也就是求\(-dis[col_x]\)的最大值,\(col_x\)也就是 ...

  2. OpenHarmony—应用间HSP开发指导

     应用间HSP用于不同应用间的代码.资源共享. 应用间HSP的宿主应用是一种特殊状态的应用,只能由一个HSP组成,不会独立运行在设备上,而是被普通应用模块的依赖项引用.当普通应用运行时,通过动态调用的 ...

  3. RabbitMQ 10 头部模式

    头部模式是根据头部信息来决定的,在发送的消息中是可以携带一些头部信息的(类似于HTTP),可以根据这些头部信息来决定路由到哪一个消息队列中. 定义配置类. import org.springframe ...

  4. HDC 2022 开发者主题演讲与技术分论坛干货分享(附课件)

     原文:https://mp.weixin.qq.com/s/axm6HyX0PqKCKksFxIfehg,点击链接查看更多技术内容.   11月4日-11月6日,HDC 2022在东莞成功举办,这是 ...

  5. 重新点亮shell————管道和重定向[二]

    前言 简单介绍一下管道和重定向. 正文 管道和信号一样,是进程通信的方式之一 管道符是"|",将前一个命令执行的结果传递给后面的命令. 比如说: ls -l | more 就是第一 ...

  6. warmup预热学习率

    学习率是神经网络训练中最重要的超参数之一,针对学习率的优化方式很多,Warmup是其中的一种 (一).什么是Warmup?Warmup是在ResNet论文中提到的一种学习率预热的方法,它在训练开始的时 ...

  7. 动态尺寸模型优化实践之Shape Constraint IR Part I

    简介: 在本系列分享中我们将介绍BladeDISC在动态shape语义下做性能优化的一些实践和思考.本次分享的是我们最近开展的有关shape constraint IR的工作,Part I 中我们将介 ...

  8. 【视频特辑】提效神器!如何用Quick BI高效配置员工的用数权限

    ​简介:随着企业数字化进程逐步加速,企业所产生和积累的数据资源日益增多.每当员工的用数权限发生变动,管理员都需要进行复杂繁琐的重复性配置流程,不仅耗时耗力还容易出错. 如何能便捷地对员工用数权限进行高 ...

  9. 重温设计模式之 Factory

    简介: 创建型模式的核心干将,工厂.简单工厂.抽象工厂,还记得清么,一文回顾和对比下. 作者 | 弥高来源 | 阿里技术公众号 前言 创建型模式的核心干将,工厂.简单工厂.抽象工厂,还记得清么,一文回 ...

  10. 阿里云边缘云ENS再升级 四大场景应用加速产业数字化落地

    ​简介: 云栖大会 | 于10月21日上午举办的边缘云应用升级与技术创新论坛中,阿里云边缘云ENS产品全面升级,从边缘云产品.技术.行业应用等维度全面阐述阿里云在边缘计算领域的技术积累.产品& ...