迭代 Numpy 数组

发布日期:2026-07-20 01:05:05  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-20 01:05:05  
0

介绍

本指南将向您介绍 NumPy 数组迭代的基础知识。我们还将深入研究迭代器对象nditer及其提供的强大迭代功能。

迭代 NumPy 数组

首先,让我们看看如何在不使用nditer对象的情况下迭代 NumPy 数组。

迭代一维数组

使用For循环迭代一维数组很简单。

      A = np.arange(12)
for cell in A:
    print(cell, end=' ')
    

输出:

      0 1 2 3 4 5 6 7 8 9 10 11
    

end指定打印值后需要打印字符。默认情况下,它会打印换行符。

与 C# 和 Java 等编程语言类似,您也可以使用while循环来迭代数组中的元素。例如:

      i = 0
while A[i] < A.size:
    print(A[i])
    i = i+1
    if(i==A.size):
        break
    

输出:

      0
1
2
3
4
5
6
7
8
9
10
11
    

A.size返回数组中元素的数量。请注意 for while 循环后面的缩进块以及需要通过语法检查的 if 语句。

迭代二维数组

如果使用相同的语法来迭代二维数组,则将只能迭代一行。

      A = np.arange(12).reshape(4,3)
for row in A:
    print(row)
    

输出:

      0 1 2]
[3 4 5]
[6 7 8]
[ 9 10 11
    

要迭代二维数组中的每个单元格,请嵌套for循环。

      for row in A:
    for cell in row:
        print(cell, end=' ')
    

输出:

      0 1 2 3 4 5 6 7 8 9 10 11
    

如果不想写两个for循环,可以使用flatten函数将二维数组展平为一维数组。例如:

      for cell in A.flatten():
        print(cell, end=' ')
    

输出:

      0 1 2 3 4 5 6 7 8 9 10 11
    

看一下 Nditer 对象

NumPy 提供了一个名为nditer的多维迭代器对象来迭代数组的元素。例如,您可以在上例中使用nditer如下:

      for cell in np.nditer(A):
    print(cell, end=' ')
    

输出:

      0 1 2 3 4 5 6 7 8 9 10 11
    

Nditer 迭代顺序

您可以使用order参数控制如何使用nditer访问元素。如果将顺序指定为C,则遵循 C 顺序,即水平遍历数组中的元素。如果将顺序指定为F,则遵循 Fortran 顺序,即垂直遍历数组中的元素。

例如,要获取“C”顺序:

      for cell in np.nditer(A, order='C'):
    print(cell, end=' ')
    

输出:

      0 1 2 3 4 5 6 7 8 9 10 11
    

获取 Fortran 顺序:

      for cell in np.nditer(A, order='F'):
    print(cell, end=' ')
    

输出:

      0 3 6 9 1 4 7 10 2 5 8 11
    

默认情况下,nditer遵循顺序“k”,这意味着它遵循与数组的内存布局相匹配的顺序。此默认设置允许它以最短的时间访问元素。为了证明这一点,让我们将矩阵“B”定义为二维矩阵“A”的转置。所以我们有:

      A
    

输出:

      array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
    

转置矩阵“B”:

      B = A.T
B
    

输出:

      array([[ 0,  3,  6,  9],
       [ 1,  4,  7, 10],
       [ 2,  5,  8, 11]])
    

因此,如果我们以默认顺序“k”进行迭代,我们应该看到矩阵“A”和“B”的相同输出。

      for cell in np.nditer(A):
    print(cell, end=' ')
    

输出:

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

输出:

      0 1 2 3 4 5 6 7 8 9 10 11
    

修改 NumPy 数组

Nditer将数组元素视为只读。因此,如果您尝试修改值,则会遇到错误。

      for cell in np.nditer(A):
    cell[...] =cell*2
    

输出:

      ValueError: assignment destination is read-only
    

要在迭代时修改数组,请使用op_flags参数。因此,要更新数组的元素:

      for cell in np.nditer(A, op_flags=['readwrite']):
    cell[...] =cell*2
A
    

输出:

      array([[ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16],
       [18, 20, 22]])
    

同时迭代两个数组

要同时迭代两个数组,请将两个数组传递给nditer对象。然后您将得到数组“A”(一个四乘三的二维数组)和数组“​​S”(一个一维数组对象):

      S = np.arange(3)
S
    

输出:

      array([0, 1, 2])
    

因此,要同时迭代数组“A”和“S”:

      for a,s in np.nditer([A,S]):
    print(a, s)
    
<div class="rich-text-editor text aem-GridColumn--tablet--12 aem-GridColumn--phone
以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据