11-NumPy遍历数组

NumPy遍历数组

NumPy 提供了一个 nditer 迭代器对象,它可以配合 for 循环完成对数组元素的遍历。

下面看一组示例,使用 arange() 函数创建一个 3*4 数组,并使用 nditer 生成迭代器对象。

示例1:

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
#使用nditer迭代器,并使用for进行遍历
for x in np.nditer(a):
   print(x,end=" ")

输出结果:

0 5 10 15 20 25 30 35 40 45 50 55

遍历顺序

在内存中,Numpy 数组提供了两种存储数据的方式,分别是 C-order(行优先顺序)与 Fortrant-order(列优先顺序)。那么 nditer 迭代器又是如何处理具有特定存储顺序的数组呢?其实它选择了一种与数组内存布局一致的顺序,之所以这样做,是为了提升数据的访问效率。

在默认情况下,当我们遍历数组中元素的时候,不需要考虑数组的存储顺序,这一点可以通过遍历上述数组的转置数组来验证。

示例 2:

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
#a的转置数组
b = a.T
print (b)
for x in np.nditer(b):
   print(x,end=",")

输出结果:

[[ 0 20 40]
 [ 5 25 45]
 [10 30 50]
 [15 35 55]]
0,5,10,15,20,25,30,35,40,45,50,55,

从示例 1、2 的输出结果可以看出,a 和 a.T 的遍历顺序是一样的,也就是说,它们在内存中的存储顺序是一样的。

下面以 C 样式访问转置数组的副本。示例 3 如下:

import numpy as np
a = np.arange(0,60,5).reshape(3,4)
#copy方法生成数组副本
for x in np.nditer(a.T.copy(order='C')):
    print (x, end=", " )

输出结果:

0, 20, 40, 5, 25, 45, 10, 30, 50, 15, 35, 55,

通过示例 3 可知 a.T.copy(order = ‘C’) 的遍历结果与示例 1、2 的数组遍历结果不一样。究其原因,就是因为它们在内存中的存储方式不一样。

指定遍历顺序

您可以通过 nditer 对象的order参数来指定数组的遍历的顺序。示例 4 如下:

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print(a)

for x in np.nditer(a, order = 'C'):
   print (x,end=",")
print()
for x in np.nditer(a, order = 'F'):
   print (x,end=",")

输出结果如下:

[[ 0  5 10 15]
 [20 25 30 35]
 [40 45 50 55]]
0,5,10,15,20,25,30,35,40,45,50,55,
0,20,40,5,25,45,10,30,50,15,35,55,

修改数组元素值

nditer 对象提供了一个可选参数op_flags,它表示能否在遍历数组时对元素进行修改。它提供了三种模式,如下所示:

1) read-only

只读模式,在这种模式下,遍历时不能修改数组中的元素。

2) read-write

读写模式,遍历时可以修改元素值。

3) write-only

只写模式,在遍历时可以修改元素值。

示例如下:

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print ("原数组是:",a)
for x in np.nditer(a, op_flags=['readwrite']):
    x[...]=2*x
print ('修改后的数组是:',a)

最后输出结果如下:

原数组是: [[ 0  5 10 15]
 [20 25 30 35]
 [40 45 50 55]]
修改后的数组是: [[  0  10  20  30]
 [ 40  50  60  70]
 [ 80  90 100 110]]

外部循环使用

nditer 对象的构造函数有一个“flags”参数,它可以接受以下参数值(了解即可):

参数值描述说明
c_index可以跟踪 C 顺序的索引。
f_index可以跟踪 Fortran 顺序的索引。
multi_index每次迭代都会跟踪一种索引类型。
external_loop返回的遍历结果是具有多个值的一维数组。

示例 6 如下:

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print("原数组",a)
#修改后数组
for x in np.nditer(a, flags = ['external_loop'], order = 'F'):
   print(x)

结果输出:

原数组 [[ 0  5 10 15]
 [20 25 30 35]
 [40 45 50 55]]
[ 0 20 40]
[ 5 25 45]
[10 30 50]
[15 35 55]
[15 35 55]

迭代多个数组

如果两个数组都能够被广播,那么 nditer 对象就可以同时对它们迭代。

假设数组 a 的维度是 34,另一个数组 b 的维度是 14 (即维度较小的数组 b 可以被广播到数组 a 中),示例如下:

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print (a)
b = np.array([1, 2, 3, 4], dtype = int)
print (b)
#广播迭代
for x,y in np.nditer([a,b]):
    print ("%d:%d" % (x,y),end=",")

输出结果是:

[[ 0 5 10 15]
[20 25 30 35]
[40 45 50 55]]
[1 2 3 4]
0:1,5:2,10:3,15:4,20:1,25:2,30:3,35:4,40:1,45:2,50:3,55:4,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/751897.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络抓包分析工具

摘要 随着网络技术的快速发展,网络数据的传输和处理变得日益复杂。网络抓包分析工具作为网络故障排查、性能优化以及安全审计的重要工具,对于提升网络管理的效率和准确性具有重要意义。本文旨在设计并实现一款高效、易用的网络抓包分析工具,…

Python实现数据库与Excel文件之间的数据导入与导出

数据库和Excel文件是两种常见且重要的数据存储方式。数据库通常用于大规模数据的高效存储、管理和查询,而Excel则以其直观的界面和简单的操作方式广泛应用于数据分析、报告生成和可视化等领域。在实际工作中,可能需要在这两者之间进行数据的导入与导出。…

网上零食销售系统

摘 要 随着互联网的快速发展,网上销售已成为零售业的重要组成部分。在众多的线上购物品类中,零食销售因其受众广泛、购买频率高、消费金额适中等特点,一直备受关注。然而,传统的零食销售方式,如实体店铺销售&#xff…

Python湍流隐式模型耗散粘性方程和大涡流模拟

🎯要点 🎯达朗贝尔一维波动通解,二维变速模拟 | 🎯达朗贝尔算子解双曲波形微分方程 | 🎯耗散系统粘性伯格斯方程快速傅里叶变换算法 | 🎯二维线性和非线性对流扩散解和湍流隐式建模 📜偏微分方…

网络研究观:网络犯罪简报

通过犯罪研究人员精选的新闻提要了解最新的全球网络犯罪威胁。 了解不同的数字欺诈以及如何保护自己。 1. 网络犯罪分子冒充 CBI 和 IB 官员:KP 加尔各答警察局警告公民,诈骗者通过发送虚假的 CBI 和 IB 通知来勒索钱财,指控他们在线观看儿…

Avue框架学习

Avue框架学习 我们的项目使用的框架是 Avue 在我看来这个框架最大的特点是可以基于JSON配置页面上的From,Table以及各种各样的输入框等,不需要懂前端就可以很快上手,前提是需要多查一下文档 开发环境搭建 由于我本地的环境全是用docker来搭建的,所以我依然选择用docker搭建我…

【第二周】基础语法学习

目录 前言初始化项目文件介绍基本介绍JSWXMLWXSS 常见组件基础组件视图容器match-mediamovable-area/viewpage-containerscroll-viewswiper 表单组件自定义组件 模板语法数据绑定单向数据绑定双向数据绑定 列表渲染条件渲染模板引用 事件系统事件类型事件绑定阻止冒泡互斥事件事…

【开源项目】自然语言处理领域的明星项目推荐:Hugging Face Transformers

在当今人工智能与大数据飞速发展的时代,自然语言处理(NLP)已成为推动科技进步的重要力量。而在NLP领域,Hugging Face Transformers无疑是一个备受瞩目的开源项目。本文将从项目介绍、代码解释以及技术特点等角度,为您深…

《梦醒蝶飞:释放Excel函数与公式的力量》6.3NOW函数

6.3NOW函数 1)NOW函数概述 NOW函数是Excel中一个非常实用的内置函数,它返回当前的日期和时间。这个函数可以自动更新,以反映打开工作簿时的确切日期和时间。 2)函数语法 NOW函数的语法非常简单,因为它不需要任何参…

操作系统-中断和异常

中断和异常 用户态:普通应用程序运行在用户态,有很多权限限制 内核态:操作系统运行在内核态,有完全的权限访问和管理所有资源(硬件,内存) 中断的作用 把CPU从用户态变内核态 异常&#xff08…

前端性能优化-实测

PageSpeed Insights 性能测试 今天测试网站性能的时候发现一个问题,一个h2标签内容为什么会占据这么长的渲染时间,甚至有阶段测到占据了7000多毫秒,使用了很多方法都不能解决,包括了修改标签,样式大小等,当…

【C++题解】* 1266. 求最大数

问题&#xff1a;1266. 求最大数 类型&#xff1a;简单循环 题目描述&#xff1a; 问 555555 的约数中最大的三位数是多少&#xff1f; 输入&#xff1a; 无。 输出&#xff1a; 约数中最大的三位数。 完整代码如下&#xff1a; #include<bits/stdc.h> using nam…

基于weixin小程序乡村旅游系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;旅游景点管理&#xff0c;景点类型管理&#xff0c;景点路线管理&#xff0c;系统管理 商家帐号账号功能包括&#xff1a;系统首页&#xff0c;旅游景点管理&…

【机器学习300问】132、自注意力机制(Self-Attention)和传统注意力机制(Attention)的区别?

最近学习注意力机制的时候&#xff0c;发现相同的概念很多&#xff0c;有必要给这些概念做一下区分&#xff0c;不然后续的学习可能会混成一团。本文先区分一下自注意力机制和传统注意力机制。我会先直接给出它们之间有何区别的结论&#xff0c;然后通过一个例子来说明。 【机…

2024最新!将mysql的数据导入到Solr

Solr导入mysql的数据 如何安装导入数据前准备配置Solr的Jar包以及Mysql驱动包1.1、将solr-8.11.3\dist下的两个包进行移动1.2、将mysql-connect包也移动到该位置1.3、重启Solr项目 配置xml2.1、第一步我们需要创建核心2.2、第二步修改xml(这里是结合19年的教程)2.3、 创建data-…

【力扣】有效的字母异位词

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 给定两个字符串 s …

嵌入式 Linux 设备刷系统具体组成

嵌入式 Linux 设备刷系统具体组成 1 介绍1.1 概述1.2 嵌入式 Linux 的组成1.3 U-Boot1.4 Linux 内核1.5 设备树1.6 根文件系统 参考 1 介绍 1.1 概述 一个完整的 linux 系统&#xff0c;通常包含了 U-Boot、kernel、设备树以及根文件系统。 1.2 嵌入式 Linux 的组成 1.3 U-…

Java源码实现《植物大战僵尸》

前言 学Java的朋友们&#xff0c;福利来了&#xff0c;今天小编给大家带来了一款 植物大战僵尸源码&#xff0c;看图: 视频演示 环境JDK1.8 类继承UML图 源码实现 我们先从main函数看起&#xff0c;继承了javafx.application.Application。JavaFx是Java图形化界面技术AWT、S…

30分钟速通ROS联合Webots仿真实战

写在前面&#xff1a; 本文是ROS联合Webots仿真实战教程&#xff0c;不包含ROS环境安装配置教程&#xff0c;ROS环境安装配置教程可以参考1.2.4 安装 ROS Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 另本文所用版本如下&#xff1a; ubuntu版本&#xff1a;20…

Github 2024-06-28 Java开源项目日报Top9

根据Github Trendings的统计,今日(2024-06-28统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目8非开发语言项目1HTML项目1《Hello 算法》:动画图解、一键运行的数据结构与算法教程 创建周期:476 天协议类型:OtherStar数量:63556…