Numpy元素的遍历方法是什么

这篇文章主要讲解了“Numpy元素的遍历方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Numpy元素的遍历方法是什么”吧!

创新互联建站-专业网站定制、快速模板网站建设、高性价比赤峰林西网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式赤峰林西网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖赤峰林西地区。费用合理售后完善,10余年实体公司更值得信赖。

一、单个数组的遍历:numpy.nditer 的使用

迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。一般情况下的使用方式如下:for x in np.nditer(data_in, order=''),可以遍历nparray中的所有数据,举例如下:

a = np.arange(12).reshape(3,4)
for x in np.nditer(a):
    print(x,end=',')
# 0,1,2,3,4,5,6,7,8,9,10,11,

格式:np.nditer(data_in, order='',op_flags =[],flags=[])

参数解释如下:

参数解释
data_innparray 类型的数组
order控制遍历的顺序,可选值为:F 列优先/C 行优先, 默认为C
op_flags控制遍历出元素的读写权限,常用:
op_flags=['read-only']  只读;
op_flags=['readwrite'] 可读可写
flags该参数通常使用flags = ['external_loop'],可以将二维数组变化为一维数组输出,详细参考下面例子

1.1 参数:order

通过参数 order='F' or  order='C' 可以通过改变遍历的顺序;举例如下:

for x in np.nditer(a, order='F'): # Fortran order,即是列序优先;for x in np.nditer(a.T, order='C'): # C order,即是行序优先;

for x in np.nditer(a,order='F'):
    print(x,end=',')
# 0,4,8,1,5,9,2,6,10,3,7,11,
for x in np.nditer(a,order='C'):
    print(x,end=',')
# 0,1,2,3,4,5,6,7,8,9,10,11,

1.2 参数:op_flags

默认情况下,nditer 对nparray进行遍历时,遍历出的元素为只读对象(read-only),若我们需要修改其中的值,需要设置:op_flags=['readwrite']

a = np.arange(12).reshape(3,4)
for x in np.nditer(a,op_flags=['readwrite']):
    x[...] = 2*x
print(a)
# [[ 0  2  4  6]
#  [ 8 10 12 14]
#  [16 18 20 22]]

1.3 参数:flags

尝试用的参数设置为:flags = ['external_loop'] ,其余的设置不常用,就不列举了;当设置flags = ['external_loop'] 后,可以实现对二维数组的行或者列的输出,在今后的写代码过程中,给大家带来便利;举例如下:

参数解释
c_index可以跟踪 C 顺序的索引, 用来返回索引值
f_index可以跟踪 Fortran 顺序的索引,用来返回索引值
external_loop给出的值是具有多个值的一维数组,而不是零维数组

举例:

# 返回索引值举例
a = np.arange(12).reshape(3,4)
for x in  np.nditer(a,flags=['f_index'],order='F'):
    print(x,end=',')
# 0,4,8,1,5,9,2,6,10,3,7,11,
for x in  np.nditer(a,flags=['f_index'],order='C'):
    print(x,end=',')
# 0,1,2,3,4,5,6,7,8,9,10,11,

# 返回列方向的多个一维数组
a = np.arange(12).reshape(3,4)
for x in  np.nditer(a,flags=['external_loop'],order='F'):
    print(x)
# [0 4 8]
# [1 5 9]
# [ 2  6 10]
# [ 3  7 11]

二、多个数组的遍历

2.1 多个数组Shape相同时

当数组Shape相同时,可以直接使用np.nditer(), 举例如下:

a = np.arange(12).reshape(3,4)
b = np.ones(12).reshape(3,4)
for i,j in np.nditer([a,b]):
    print(i,"-->",int(j))
# 输出如下:
# 0 --> 1
# 1 --> 1
# 2 --> 1
# 3 --> 1
# 4 --> 1
# 5 --> 1
# 6 --> 1
# 7 --> 1
# 8 --> 1
# 9 --> 1
# 10 --> 1
# 11 --> 1

2.2 多个数组Shape不同时

当数组Shape不同时,需要满足广播规则,才可以使用广播遍历,广播规则请参考:请添加链接描述 举例如下:

a = np.arange(12).reshape(3,4)
b = np.arange(4)
for i,j in np.nditer([a,b]):
    print(i,"-->",j)
# 输出如下:
# 0 --> 0
# 1 --> 1
# 2 --> 2
# 3 --> 3
# 4 --> 0
# 5 --> 1
# 6 --> 2
# 7 --> 3
# 8 --> 0
# 9 --> 1
# 10 --> 2
# 11 --> 3

感谢各位的阅读,以上就是“Numpy元素的遍历方法是什么”的内容了,经过本文的学习后,相信大家对Numpy元素的遍历方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


分享名称:Numpy元素的遍历方法是什么
当前地址:http://scyanting.com/article/ppcppd.html