python3-numpy np.nditer 迭代数组、np.nditer修改数组、np.nditer广播迭代
1、基本使用
import numpy as np"""
NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。
迭代器最基本的任务的可以完成对数组元素的访问。
"""
a = np.arange(6).reshape(2,3)
print ('原始数组是:')
print (a)
print ('迭代输出元素:')
for x in np.nditer(a):print (x, end=", " )
print("\n ")
"""
原始数组是:
[[0 1 2][3 4 5]]
迭代输出元素:
0, 1, 2, 3, 4, 5, 以上实例不是使用标准 C 或者 Fortran 顺序,选择的顺序是和数组内存布局一致的,这样做是为了提升访问的效率,默认是行序优先(row-major order,或者说是 C-order)。
"""
# 我们可以通过迭代上述数组的转置来看到这一点,并与以 C 顺序访问数组转置的 copy 方式做对比,如下实例:
a = np.arange(6).reshape(2, 3)
for x in np.nditer(a.T):print(x, end=", ") # 0, 1, 2, 3, 4, 5,
print('\n')for x in np.nditer(a.T.copy(order='C')):print(x, end=", ") # 0, 3, 1, 4, 2, 5,
print('\n')print(a.T)
print(a.T.copy(order='C'))
"""
[[0 3][1 4][2 5]]
[[0 3][1 4][2 5]]从上述例子可以看出,a 和 a.T 的遍历顺序是一样的,也就是他们在内存中的存储顺序也是一样的,但是 a.T.copy(order = 'C') 的遍历结果是不同的,那是因为它和前两种的存储方式是不一样的,默认是按行访问。
"""
2、控制遍历顺序
for x in np.nditer(a, order=‘F’):Fortran order,即是列序优先;
for x in np.nditer(a.T, order=‘C’):C order,即是行序优先;
方式一、使用copy
a = np.arange(0,60,5)
a = a.reshape(3,4)
print ('原始数组是:')
print (a)
print ('原始数组的转置是:')
b = a.T
print (b)
print ('以 C 风格顺序排序:')
c = b.copy(order='C')
print (c)
for x in np.nditer(c):print (x, end=", " )
print ('\n')
print ('以 F 风格顺序排序:')
c = b.copy(order='F')
print (c)
for x in np.nditer(c):print (x, end=", " )
"""
原始数组是:
[[ 0 5 10 15][20 25 30 35][40 45 50 55]]
原始数组的转置是:
[[ 0 20 40][ 5 25 45][10 30 50][15 35 55]]
以 C 风格顺序排序:
[[ 0 20 40][ 5 25 45][10 30 50][15 35 55]]
0, 20, 40, 5, 25, 45, 10, 30, 50, 15, 35, 55, 以 F 风格顺序排序:
[[ 0 20 40][ 5 25 45][10 30 50][15 35 55]]
0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55,
"""
方式二、显式设置,强制 nditer 对象使用某种顺序
# 可以通过显式设置,来强制 nditer 对象使用某种顺序:
a = np.arange(0,60,5)
a = a.reshape(3,4)
print ('原始数组是:')
print (a)
print ('以 C 风格顺序排序:')
for x in np.nditer(a, order = 'C'):print (x, end=", " )
print ('\n')
print ('以 F 风格顺序排序:')
for x in np.nditer(a, order = 'F'):print (x, end=", " )"""
原始数组是:
[[ 0 5 10 15][20 25 30 35][40 45 50 55]]
以 C 风格顺序排序:
0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 以 F 风格顺序排序:
0, 20, 40, 5, 25, 45, 10, 30, 50, 15, 35, 55,
"""
3、修改数组中元素的值
nditer 对象有另一个可选参数 op_flags。 默认情况下,nditer 将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值得修改,必须指定 read-write 或者 write-only 的模式。
a = np.arange(0,60,5)
a = a.reshape(3,4)
print ('原始数组是:')
print (a)
print ('\n')
for x in np.nditer(a, op_flags=['readwrite']):x[...]=2*x
print ('修改后的数组是:')
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]]
"""
4、广播迭代
如果两个数组是可广播的,nditer 组合对象能够同时迭代它们。 假设数组 a 的维度为 3X4,数组 b 的维度为 1X4 ,则使用以下迭代器(数组 b 被广播到 a 的大小)。
a = np.arange(0,60,5)
a = a.reshape(3,4)
print ('第一个数组为:')
print (a)
print ('\n')
print ('第二个数组为:')
b = np.array([1, 2, 3, 4], dtype = int)
print (b)
print ('\n')
print ('修改后的数组为:')
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, """
https://www.runoob.com/numpy/numpy-terating-over-array.html
python3-numpy np.nditer 迭代数组、np.nditer修改数组、np.nditer广播迭代相关推荐
- B10_NumPy数组操作、修改数组形状、翻转数组、修改数组维度、连接数组、分割数组、数组元素的添加与删除
NumPy数组操作 Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 函数 描述 resha ...
- java改变数组长度_Java修改数组长度
java中没有关于修改数组长度的api,在此本人提供了修改数组长度的两个函数:arrayAddLength()和arrayReduceLength().详细见代码. [java] view plain ...
- js基础(数组)--数组类型、类数组对象、作为数组的字符串
1.数组类型 我们到处都可以看见数组是具有特殊行为的对象.给定一个未知的对象,判定它是否为数组通常非常 有用.在ECMAScript 5中,可以使用Array.isArray()函数来做这件事情:Ar ...
- java基础5 (一维)数组和二维数组
本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等)) 二维数组(二维数组的遍历.排序.查找.定义 ...
- 修改数组相应位置元素——splice()
版权声明:本文为博主原创文章,未经博主允许不得转载. splice()--所有主流浏览器都支持 splice() 方法. 定义和用法 splice() 方法向/从数组中**添加/删除**项目,然后返回 ...
- python使用numpy中的flatten函数将2D numpy数组拉平为1Dnumpy数组、使用np.linalg.matrix_rank函数计算2D numpy数组的秩(rank)
python使用numpy中的flatten函数将2D numpy数组拉平为1Dnumpy数组.使用np.linalg.matrix_rank函数计算2D numpy数组的秩(rank) 目录
- python使用numpy的np.float_power函数计算numpy数组中每个数值的指定幂次(例如平方、立方)、np.power函数默认返回整数格式、np.float_power函数返回浮点数
python使用numpy的np.float_power函数计算numpy数组中每个数值的指定幂次(例如平方.立方).np.power函数默认返回整数格式.np.float_power函数默认返回浮点 ...
- python使用numpy的np.power函数计算numpy数组中每个数值的指定幂次(例如平方、立方)、np.power函数默认返回整数格式、np.float_power函数默认返回浮点数
python使用numpy的np.power函数计算numpy数组中每个数值的指定幂次(例如平方.立方).np.power函数默认返回整数格式.np.float_power函数默认返回浮点数 目录
- python3 numpy中矩阵np.dot(a,b)乘法运算
python np.dot(a,b)乘法运算 首先我们知道矩阵运算是不满足交换律的,np.dot(a, b)与np.dot(b, a)是不一样的 另外np.dot(a,b)和a.dot(b)果是一样的 ...
最新文章
- Http和Https对比
- Cassandra 单机入门例子——有索引
- 二叉树中如何求根节点到任意节点的路径?
- stm32f103c8t6掉坑记
- 2019牛客暑期多校训练营(第七场)
- boost::local_time模块实现创建各种dst_calc_rule的测试程序
- Swift5之网易云音乐页面搭建
- 股票开盘的最大成交额-----一道不错的贪心算法题目
- 扁平图文列表小程序模板
- jQuery实现一个优雅的返回顶部
- 无线蓝牙耳机i12充电_2019年TWS新趋势:8大品牌新款真无线蓝牙耳机支持无线充电...
- WCF把书读薄(4)——事务编程与可靠会话
- 安装sun-java5-jdk 提示无法找到软件包sun-java5-jdk
- 数建--LINGO软件介绍
- 奥克兰大学计算机专业好找工作吗,留学选择奥克兰大学的计算机专业肯定不会后悔...
- c++ 优先队列(priority_queue)
- 【STL】STL函数总结,助你代码实用高逼格
- 本科课程【计算机网络】实验2 - 交换机的VLAN配置实验
- 若依(RuoYi)配置教程
- 弘玑Cyclone联合北京大学共建中国首个超级自动化校企联合实验室