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,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎点赞、收藏、关注
NumPy 数组迭代与合并详解的更多相关文章
- GoLang基础数据类型--->数组(array)详解
GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...
- NumPy 数组迭代
章节 Numpy 介绍 Numpy 安装 NumPy ndarray NumPy 数据类型 NumPy 数组创建 NumPy 基于已有数据创建数组 NumPy 基于数值区间创建数组 NumPy 数组切 ...
- 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解
数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...
- Day17:稀疏数组的超细详解
稀疏数组的超细详解 一个含有大量重复元素的二维数组,我们可以提取其有效元素,压缩空间,整合为一个稀疏数组. 例如一个五子棋棋盘,我们将棋盘看作为一个二维数组,没有棋子的位置为0:黑棋为1:白棋为2: ...
- numpy 数组迭代Iterating over arrays
在numpy 1.6中引入的迭代器对象nditer提供了许多灵活的方式来以系统的方式访问一个或多个数组的所有元素. 1 单数组迭代 该部分位于numpy-ref-1.14.5第1.15 部分Singl ...
- dsu on tree (树上启发式合并) 详解
一直都没出过算法详解,昨天心血来潮想写一篇,于是 dsu on tree 它来了 1.前置技能 1.链式前向星(vector 建图) 2.dfs 建树 3.剖分轻重链,轻重儿子 重儿子 一个结点的所有 ...
- 以np.concatenate为主题,谈谈numpy数组按维度合并的问题
1.引言 最近在做多模态融合的图像问题,其中最需要解决的就是不同模态的图像用什么方法进行融合,最简单也最直观的方法就是采用合并数组的方法,将不同模态的图像合并为多通道进行处理.在一些论文中,比如< ...
- JavaScript入门之数组:Array类型详解
数组应该是每个语言中都用得极度频繁的数据类型,JavaScript也不例外. 个人认为,Js中的Array类型非常强大. 首先没有C/C++等语言需要在数组初始化时指定数组长度(并不可变)的要求. 也 ...
- numpy函数:[6]arange()详解
arange函数用于创建等差数组,使用频率非常高,arange非常类似range函数,会python的人肯定经常用range函数,比如在for循环中,几乎都用到了range,下面我们通过range来学 ...
- numpy 介绍和基础使用详解
NUMPY INTRODUCTION NUMPY 提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于处理多维数组,用于储存和处理大型矩阵,本身是由C语言开发,比python自身的列表 ...
随机推荐
- #倍增FFT#CF755G PolandBall and Many Other Balls
题目 有一排 \(n\) 个球,定义一个组可以只包含一个球或者包含两个相邻的球. 现在一个球只能分到一个组中,求从这些球中取出 \(k\) 组的方案数. \(n\leq 10^9 ,k<2^{1 ...
- 使用vcpkg和OHOS SDK构建开源软件
安装OHOS SDK 参照OHOS IDE和SDK的安装方法,安装构建工具. 创建用户环境变量OHOS_NDK_HOME,指向OHOS SDK的安装路径,比如D:\Tools\Huawei\OHOS\ ...
- 开启新时代,承接新使命,开放原子开源大赛OpenHarmony创新赛正式启航!
开放原子开源大赛OpenHarmony创新赛,正式启动啦! "OpenHarmony创新赛"是开放原子全球开源大赛下开设的创新赛道,面向企业.个人.高校师生等广大开发者,聚焦O ...
- 预约直播|3月30日下周四,应用促活大揭秘,快速提升DAU
[导读] 日常运营过程中,消息推送是App触达用户的常用手段,无论是新功能的通知,还是活动的提醒,都可以通过推送告知用户.千人千面的个性化推送,对于提升用户粘性.用户转化等指标都具有明显正向效果.越来 ...
- HarmonyOS网络管理开发—Socket连接
简介 Socket连接主要是通过Socket进行数据传输,支持TCP/UDP/TLS协议. 基本概念 ● Socket:套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象. ● ...
- Pytorch Dataset入门
Dataset入门 Pytorch Dataset code:torch/utils/data/dataset.py#L17 Pytorch Dataset tutorial: tutorials ...
- coco2017 Dataset EDA
Github仓库:gy-7/coco_EDA (github.com) 对coco数据集的分析,近期忙着写论文,空余时间很少能写博文了. EDA的代码放在结尾了,Github仓库里也有.仓库里还有其他 ...
- 试用阿里云GPU服务器进行深度学习模型训练
试用阿里云GPU服务器进行深度学习模型训练 最近在用PyTorch时发现在本地训练模型速度一言难尽,然后发现阿里云可以白嫖gpu服务器,只要没有申请过PAI-DSW资源的新老用户都可以申请5000CU ...
- 如何基于香橙派AIpro对视频/图像数据进行预处理
本文分享自华为云社区<如何基于香橙派AIpro对视频/图像数据进行预处理>,作者: 昇腾CANN. 受网络结构和训练方式等因素的影响,绝大多数神经网络模型对输入数据都有格式上的限制.在计算 ...
- 可观测告警运维系统调研——SLS告警与多款方案对比
简介: 本文介绍对比多款告警监控运维平台方案,覆盖阿里云SLS.Azure.AWS.自建系统(ELK.Prometheus.TICK)等方案. 前言 本篇是SLS新版告警系列宣传与培训的第三篇,后续我 ...