NumPy 迭代数组


NumPy是一个开源的Python科学计算库,提供了一个强大的N维数组对象和各种常用函数,包括索引、数学运算、排序、过滤、统计、拟合等。在进行迭代操作时,NumPy提供了不同的方式来遍历整个数组,以进行操作。

一、迭代方式

NumPy迭代数组有两种方式:循环和矢量化。循环是指用Python原生的方式来循环遍历数组,而矢量化则是指利用NumPy的函数和运算符来对整个数组进行操作。

二、循环迭代

  1. for循环方式

最基本的遍历方式就是使用Python原生的for循环语句。对于一维数组,我们可以使用以下代码进行遍历:

import numpy as np

arr = np.array([1, 2, 3, 4])
for x in arr:
  print(x)

输出结果如下:

1
2
3
4

对于多维数组,我们可以使用嵌套的for循环语句,如下所示:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
for x in arr:
  for y in x:
    print(y)

输出结果如下:

1
2
3
4
5
6
7
8
9
  1. nditer迭代器方法

除了for循环语句外,NumPy还提供了nditer迭代器方法,用于对数组进行迭代操作。nditer方法的默认参数值是C排序方式(即按行进行迭代),我们可以使用order参数来改变默认排序方式。

import numpy as np

arr = np.array([[1, 2], [3, 4]])
for x in np.nditer(arr, order='F'):
  print(x)

输出结果如下:

1
3
2
4

三、矢量化

矢量化是一种更快速的算法处理方式,将每个元素与向量或矩阵进行操作,而不是循环每个元素。这种方式在处理大量数据时,可以节省大量时间和资源。

  1. 算术运算符

NumPy提供了一系列算术运算符(+、-、*、/等),用于对整个数组进行操作。如下所示,我们可以执行对两个数组的逐个元素进行求和:

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print(arr1 + arr2)

输出结果如下:

[5 7 9]

同样,我们还可以执行其他算术运算,如减法、乘法、除法等。

  1. 其他运算符

NumPy还提供了一系列其他运算符,包括比较运算符、布尔运算符、位运算符等等。这些运算符同样可以用于整个数组的操作。下面是一些示例代码:

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
print(arr > 3)
print(arr != 3)
print(arr & 1)

输出结果如下:

[False False False  True  True]
[ True  True False  True  True]
[1 0 1 0 1]

四、小结

在NumPy中,我们可以采用循环迭代和矢量化两种方式对数组进行操作。对于简单的操作,循环迭代可行,但是对于涉及大量数据的操作,矢量化方式通常更快速有效。无论哪种方式,我们都应该根据具体情况选取最合适的方法。