NumPy 数组迭代

2024 年 8 月 29 日 | 阅读 3 分钟

NumPy 提供了一个迭代器对象,即 nditer,可以使用 python 标准迭代器接口来迭代给定的数组。

请看以下示例。

示例

输出

Printing array:
[[ 1  2  3  4]
 [ 2  4  5  6]
 [10 20 39  3]]
Iterating over the array:
1 2 3 4 2 4 5 6 10 20 39 3 

迭代的顺序不遵循任何特殊的排序,如行优先或列优先。但是,它旨在匹配数组的内存布局。

让我们迭代上面示例中给出的数组的转置。

示例

输出

Printing the array:
[[ 1  2  3  4]
 [ 2  4  5  6]
 [10 20 39  3]]
Printing the transpose of the array:
[[ 1  2 10]
 [ 2  4 20]
 [ 3  5 39]
 [ 4  6  3]]
1 2 3 4 2 4 5 6 10 20 39 3 

迭代顺序

我们知道,有两种方法可以将值存储到 numpy 数组中

  1. F 风格顺序
  2. C 风格顺序

让我们看一个例子,说明 numpy 迭代器如何处理特定的顺序(F 或 C)。

示例

输出

Printing the array:

[[ 1  2  3  4]
 [ 2  4  5  6]
 [10 20 39  3]]

Printing the transpose of the array:

[[ 1  2 10]
 [ 2  4 20]
 [ 3  5 39]
 [ 4  6  3]]

Iterating over the transposed array

1 2 3 4 2 4 5 6 10 20 39 3 
Sorting the transposed array in C-style:

[[ 1  2 10]
 [ 2  4 20]
 [ 3  5 39]
 [ 4  6  3]]

Iterating over the C-style array:

1 2 10 2 4 20 3 5 39 4 6 3 [[ 1  2 10]
 [ 2  4 20]
 [ 3  5 39]
 [ 4  6  3]]
Iterating over the F-style array:

1 2 3 4 2 4 5 6 10 20 39 3 

我们可以在定义迭代器对象本身时提到 'C' 或 'F' 顺序。 考虑以下示例。

示例

输出

Iterating over the transposed array

1 2 3 4 2 4 5 6 10 20 39 3
Sorting the transposed array in C-style:


Iterating over the C-style array:

1 2 10 2 4 20 3 5 39 4 6 3 

数组值修改

我们不能在迭代期间修改数组元素,因为与迭代器对象关联的 op-flag 设置为只读。

但是,我们可以将此标志设置为 readwrite 或仅写以修改数组值。 考虑以下示例。

示例

输出

Printing the original array:

[[ 1  2  3  4]
 [ 2  4  5  6]
 [10 20 39  3]]

Iterating over the modified array

3 6 9 12 6 12 15 18 30 60 117 9 

下一个主题NumPy 位运算符