NumPy在数组上的迭代
NumPy - 数组上的迭代
NumPy 包包含一个迭代器对象numpy.nditer。 它是一个有效的多维迭代器对象,可以用于在数组上进行迭代。 数组的每个元素可使用 Python 的标准Iterator接口来访问。
让我们使用arange()函数创建一个 3X4 数组,并使用nditer对它进行迭代。
示例 1
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print  '原始数组是:'
print a print  '\n'
print  '修改后的数组是:'
for x in np.nditer(a):
    print x,
输出如下:
原始数组是:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]
修改后的数组是:
0 5 10 15 20 25 30 35 40 45 50 55
示例 2
迭代的顺序匹配数组的内容布局,而不考虑特定的排序。 这可以通过迭代上述数组的转置来看到。
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print  '原始数组是:'
print a
print  '\n'
print  '原始数组的转置是:'
b = a.T
print b
print  '\n'
print  '修改后的数组是:'
for x in np.nditer(b):
    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]]
修改后的数组是:
0 5 10 15 20 25 30 35 40 45 50 55
迭代顺序
如果相同元素使用 F 风格顺序存储,则迭代器选择以更有效的方式对数组进行迭代。
示例 1
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print  '原始数组是:'
print a print  '\n'
print  '原始数组的转置是:'
b = a.T
print b
print  '\n'
print  '以 C 风格顺序排序:'
c = b.copy(order='C')
print c for x in np.nditer(c):
    print x,
print  '\n'
print  '以 F 风格顺序排序:'
c = b.copy(order='F')
print c
for x in np.nditer(c):
    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]]
以 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
示例 2
可以通过显式提醒,来强制nditer对象使用某种顺序:
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print  '原始数组是:'
print a
print  '\n'
print  '以 C 风格顺序排序:'
for x in np.nditer(a, order =  'C'):
    print x,
print  '\n'
print  '以 F 风格顺序排序:'
for x in np.nditer(a, order =  'F'):
    print x,
输出如下:
原始数组是:
[[ 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
修改数组的值
nditer对象有另一个可选参数op_flags。 其默认值为只读,但可以设置为读写或只写模式。 这将允许使用此迭代器修改数组元素。
示例
import numpy as np
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]]
外部循环
nditer类的构造器拥有flags参数,它可以接受下列值:
| 序号 | 参数及描述 | 
|---|---|
| 1. | c_index 可以跟踪 C 顺序的索引 | 
| 2. | f_index 可以跟踪 Fortran 顺序的索引 | 
| 3. | multi-index 每次迭代可以跟踪一种索引类型 | 
| 4. | external_loop 给出的值是具有多个值的一维数组,而不是零维数组 | 
示例
在下面的示例中,迭代器遍历对应于每列的一维数组。
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print  '原始数组是:'
print a
print  '\n'
print  '修改后的数组是:'
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]
广播迭代
如果两个数组是可广播的,nditer组合对象能够同时迭代它们。 假设数组a具有维度 3X4,并且存在维度为 1X4 的另一个数组b,则使用以下类型的迭代器(数组b被广播到a的大小)。
示例
import numpy as np
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),
输出如下:
第一个数组:
[[ 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												
											NumPy在数组上的迭代的更多相关文章
- Numpy | 12 数组操作
		
Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 一.修改数组形状 函数 描述 reshape 不改变数据 ...
 - NumPy:数组计算
		
一.MumPy:数组计算 1.NumPy是高性能科学计算和数据分析的基础包.它是pandas等其他各种工具的基础.2.NumPy的主要功能: ndarray,一个多维数组结构,高效且节省空间 无需循环 ...
 - JavaScript 基础数组循环和迭代的几种方法
		
JavaScript 数组循环和迭代 (之前一直没怎么注意数组循环,今天做一道题时,用到forEach循环发现它并没有按照我想象的样子执行,总结一下数组循环) 一.第一种方法就是for()循环 ...
 - Numpy | 04 数组属性
		
NumPy 数组的维数称为秩(rank),一维数组的秩为 1,二维数组的秩为 2,以此类推. 在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions).比如说,二 ...
 - 利用Python进行数据分析 第4章 NumPy基础-数组与向量化计算(3)
		
4.2 通用函数:快速的元素级数组函数 通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数. 1)一元(unary)ufunc,如,sqrt和exp函数 2)二元(unary) ...
 - 关于NumPy中数组轴的理解
		
参考原文链接(英文版):https://www.sharpsightlabs.com/blog/numpy-axes-explained/:中文版:https://www.jianshu.com/p/ ...
 - numpy使用数组进行数据处理
		
numpy使用数组进行数据处理 meshgrid函数 理解: 二维坐标系中,X轴可以取三个值1,2,3, Y轴可以取三个值7,8, 请问可以获得多少个点的坐标? 显而易见是6个: (1,7)(2,7) ...
 - python数据分析 Numpy基础 数组和矢量计算
		
NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...
 - 找出numpy array数组的最值及其索引
		
在list列表中,max(list)可以得到list的最大值,list.index(max(list))可以得到最大值对应的索引 但在numpy中的array没有index方法,取而代之的是where ...
 
随机推荐
- Scala学习之Tuple、Map、Array
			
1.Tuple Tuple的中文意思是元组,它的定义是不需要方法. 例如:val tup=(25,”Tuple”,”Map”,”Array”). 值得注意的是,Tuple在进行索引的时候,与我们平时所 ...
 - 解决: ./netapp.bin: error while loading shared libraries: libcaffe.so.1.0.0: cannot open shared object file: No such file or directory 运行时报错(caffe)
			
caffe安装好后lib没有配置到/usr/lib或/usr/local/lib中,需手动配置: export LD_LIBRARY_PATH=/path_to_your_caffe/build/li ...
 - django的项目创建简明流程
			
个人理解,不妥之处请指出 创建项目:django-admin startproject user_sys 创建APP:python manage.py startapp auth 测试项目创建是否成功 ...
 - mysql创建索引/删除索引操作
			
-- 1.ALTER 创建索引 -- table_name表名,column_list列名,index_name索引名 -- 创建index索引 ALTER TABLE table_name ADD ...
 - CWM是什么?
			
CWM [1] (CommonWarehouseMetamodel公共仓库元模型)是OMG组织在数据仓库系统中定义了一套完整的元模型体系结构,用于数据仓库构建和应用的元数据建模.公共仓库元模型指定的 ...
 - 001-es6变量声明、解构赋值、解构赋值主要用途
			
一.基本语法 1.1.声明变量的六种方法 参看地址:http://es6.ruanyifeng.com/#docs/let let:局部变量,块级作用域,声明前使用报错 var:全局变量,声明前使用 ...
 - Java读写.properties文件实例,解决中文乱码问题
			
package com.lxk.propertyFileTest; import java.io.*; import java.util.Properties; /** * 读写properties文 ...
 - Tensorflow 学习笔记(一)TensorFlow入门
			
一.计算模型----计算图 1.1 计算图的概念:TensorFlow就是通过图的形式绘制出张量节点的计算过程,例如下图执行了一个a+b的操作. 1.2 计算图的使用 TensorFlow程序一般分为 ...
 - sublime txet 3  python 开发环境安装配置
			
下载python 下载地址:https://www.python.org/downloads/windows/ 下载sublime text 3 下载地址:https://www.sublimetex ...
 - 海量数据处理之Bloom Filter详解
			
前言 : 即可能误判 不会漏判 一.什么是Bloom Filter Bloom Filter是一种空间效率很高的随机数据结构,它的原理是,当一个元素被加入集合时,通过K个Hash函 ...