广告位联系
返回顶部
分享到

Python NumPy教程之遍历数组介绍

python 来源:互联网 作者:佚名 发布时间:2022-08-29 21:25:21 人浏览
摘要

NumPy 包包含一个迭代器对象numpy.nditer。它是一个高效的多维迭代器对象,使用它可以迭代数组。使用 Python 的标准迭代器接口访问数组的每个元素。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

NumPy 包包含一个迭代器对象numpy.nditer。它是一个高效的多维迭代器对象,使用它可以迭代数组。使用 Python 的标准迭代器接口访问数组的每个元素。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# 用于遍历数组的 Python 程序

  

import numpy as geek

  

# 使用排列方法创建数组

a = geek.arange(12)

  

# 具有 3 行和 4 列的形状数组

a = a.reshape(3,4)

  

print('Original array is:')

print(a)

print()

  

print('Modified array is:')

  

# 迭代数组

for x in geek.nditer(a):

    print(x)

输出:

Original array is:
[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]]

Modified array is:
0 1 2 3 4 5 6 7 8 9 10 11

选择迭代的顺序以匹配数组的内存布局,而不考虑特定的顺序。这可以通过迭代上述数组的转置来看出。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# 用于迭代转置的 Python 程序

# array

  

import numpy as geek

  

# 使用排列方法创建数组

a = geek.arange(12)

  

# 具有 3 行和 4 列的形状数组

a = a.reshape(3,4)

     

print('Original array is:')

print(a)

print() 

     

# 原始数组的转置

b = a.T

     

print('Modified array is:')

for x in geek.nditer(b):

    print(x)

输出:

Original array is:
[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]]

Modified array is:
0 1 2 3 4 5 6 7 8 9 10 11

控制迭代顺序

有时以特定顺序访问数组元素很重要,而与内存中元素的布局无关。nditer 对象提供了一个 order 参数来控制迭代的这一方面。具有上述行为的默认设置是 order='K' 以保持现有顺序。这可以用 order='C' 覆盖 C 订单和 order='F' 用于 Fortran 订单。

代码#1:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# 用于使用特定顺序迭代数组的 Python 程序

  

import numpy as geek

  

# 使用排列方法创建数组

a = geek.arange(12)

  

# 具有 3 行和 4 列的形状数组

a = a.reshape(3,4)

  

print('Original array is:')

print(a)

print() 

  

print('Modified array in C-style order:')

  

# 具有 3 行和 4 行的形状数组,以给定的顺序排列数组

for x in geek.nditer(a, order = 'C'):

    print(x)

输出:

Original array is:
[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]]

Modified array in C-style order:
0 1 2 3 4 5 6 7 8 9 10 11

代码#2:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# 用于使用特定顺序迭代数组的 Python 程序

  

import numpy as geek

  

# 使用排列方法创建数组

a = geek.arange(0,60,5)

  

# 具有 3 行和 4 列的形状数组

a = a.reshape(3,4)

  

print('Original array is:')

print(a)

print() 

  

print('Modified array in F-style order:')

  

# 以给定顺序迭代数组

for x in geek.nditer(a, order = 'F'):

    print(x)

输出:

Original array is:
[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]]

Modified array in F-style order:
0 4 8 1 5 9 2 6 10 3 7 11

修改数组值

nditer 对象有另一个可选参数,称为op_flags。其默认值为只读,但可以设置为读写或只写模式。这将启用使用此迭代器修改数组元素。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

# 用于修改数组值的 Python 程序

  

import numpy as geek

  

# 使用排列方法创建数组

a = geek.arange(12)

  

# 具有 3 行和 4 列的形状数组

a = a.reshape(3,4)

print('Original array is:')

print(a)

print()

  

# 修改数组值

for x in geek.nditer(a, op_flags = ['readwrite']):

    x[...] = 5*x

print('Modified array is:')

print(a)

输出:

Original array is:
[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]]

Modified array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

外环:

类nditer构造函数有一个flags参数,可以取以下值

范围 描述
external_loop 导致给定的值是具有多个值的一维数组,而不是零维数组
c_index C_order索引可以被跟踪
f_index 跟踪 Fortran_order 索引
multi-index 可以跟踪每次迭代一个索引的类型

代码#1:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# 使用外部循环迭代数组值的 Python 程序

  

import numpy as geek

  

# 使用排列方法创建数组

a = geek.arange(12)

  

# 具有 3 行和 4 列的形状数组

a = a.reshape(3,4)

  

print('Original array is:')

print(a)

print() 

  

print('Modified array is:')

for x in geek.nditer(a, flags = ['external_loop'], order = 'C'):

    print(x)

输出:

Original array is:
[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]]

Modified array is:
[ 0 1 2 3] [ 4 5 6 7] [8 9 10 11] 

代码#2:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# 使用 f_index 迭代数组值的 Python 程序

  

import numpy as geek

  

# 使用排列方法创建数组

a = geek.arange(6)

  

# 具有 2 行和 3 列的形状数组

a = a.reshape(2,3)

  

print('Original array is:')

print(a)

print()

  

# 使用 f_index 参数迭代数组

it = geek.nditer(a, flags=['f_index'])

while not it.finished:

      print("%d <%d>" % (it[0], it.index), end=" ")

      it.iternext()

输出:

Original array is:
[[ 0 1 2]
 [ 3 4 5]]

0 <0> 1 <2> 2 <4> 3 <1> 4 <3> 5 <5>

广播迭代

如果两个数组是可广播的,则组合的nditer对象能够同时对它们进行迭代。假设一个数组a的维度为3X4,并且还有另一个维度为1X4的数组b,则使用以下类型的迭代器(数组b广播到a的大小)。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

# 用于迭代数组的 Python 程序

  

import numpy as geek

  

# 使用排列方法创建数组

a = geek.arange(12)

  

# 具有 3 行和 4 列的形状数组

a = a.reshape(3,4)

  

print('First array is:')

print(a)

print() 

  

# 使用数组方法创建第二个数组

print('Second array is:')

b = geek.array([5, 6, 7, 8], dtype = int)

print(b) 

print()

  

print('Modified array is:')

for x,y in geek.nditer([a,b]):

    print("%d:%d" % (x,y))

输出:

First array is:
[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]]

Second array is:
[5 6 7 8]

Modified array is:
0:5 1:6 2:7 3:8 4:5 5:6 6:7 7:8 8:5 9:6 10:7 11:8


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://juejin.cn/post/7136879847095140383
相关文章
  • Python Django教程之实现新闻应用程序

    Python Django教程之实现新闻应用程序
    Django是一个用Python编写的高级框架,它允许我们创建服务器端Web应用程序。在本文中,我们将了解如何使用Django创建新闻应用程序。 我们将
  • 书写Python代码的一种更优雅方式(推荐!)

    书写Python代码的一种更优雅方式(推荐!)
    一些比较熟悉pandas的读者朋友应该经常会使用query()、eval()、pipe()、assign()等pandas的常用方法,书写可读性很高的「链式」数据分析处理代码
  • Python灰度变换中伽马变换分析实现

    Python灰度变换中伽马变换分析实现
    1. 介绍 伽马变换主要目的是对比度拉伸,将图像灰度较低的部分进行修正 伽马变换针对的是对单个像素点的变换,也就是点对点的映射 形
  • 使用OpenCV实现迷宫解密的全过程

    使用OpenCV实现迷宫解密的全过程
    一、你能自己走出迷宫吗? 如下图所示,可以看到是一张较为复杂的迷宫图,相信也有人尝试过自己一点一点的找出口,但我们肉眼来解谜
  • Python中的数据精度问题的介绍

    Python中的数据精度问题的介绍
    一、python运算时精度问题 1.运行时精度问题 在Python中(其他语言中也存在这个问题,这是计算机采用二进制导致的),有时候由于二进制和
  • Python随机值生成的常用方法

    Python随机值生成的常用方法
    一、随机整数 1.包含上下限:[a, b] 1 2 3 4 import random #1、随机整数:包含上下限:[a, b] for i in range(10): print(random.randint(0,5),end= | ) 查看运行结
  • Python字典高级用法深入分析讲解
    一、 collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [(a,2),(b,3),(a,1),(b,4),(a,3),(a,1),(b,3)] 一个字典就是一个键对
  • Python浅析多态与鸭子类型使用实例
    什么多态:同一事物有多种形态 为何要有多态=》多态会带来什么样的特性,多态性 多态性指的是可以在不考虑对象具体类型的情况下而直
  • Python字典高级用法深入分析介绍
    一、 collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [(a,2),(b,3),(a,1),(b,4),(a,3),(a,1),(b,3)] 一个字典就是一个键对
  • Python淘宝或京东等秒杀抢购脚本实现(秒杀脚本

    Python淘宝或京东等秒杀抢购脚本实现(秒杀脚本
    我们的目标是秒杀淘宝或京东等的订单,这里面有几个关键点,首先需要登录淘宝或京东,其次你需要准备好订单,最后要在指定时间快速
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计