NumPy遍历数组
NumPy 包包含一个迭代器对象numpy.nditer。它是一个高效的多维迭代器对象,使用它可以迭代数组。使用 Python编程的标准迭代器接口访问数组的每个元素。本文,为你介绍NumPy遍历数组。
单数组迭代
为了避免使用多个循环,我们使用了一个名为 nditer 的 NumPy 函数。nditer用于在一次迭代中迭代数组的每个元素。让我们看下面的示例,其中数组 arr 使用 np.arange 函数创建,然后使用 np.reshape 函数转换为 3 行和 4 列的形状。
import numpy as np
arr = np.arange(12)
arr1=arr.reshape(3,4)
print("arr1:\n",arr1)
print("Traversed array:")
for i in np.nditer(arr1):
print(i, end=' ')
输出:
arr1:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
Traversed array:
0 1 2 3 4 5 6 7 8 9 10 11
推荐:NumPy数值范围的数组
迭代顺序
如果使用 F 样式的顺序存储相同的元素,则迭代器会选择更有效的方式来迭代数组。可以通过明确提及来强制nditer对象使用特定顺序。
import numpy as geek
a = geek.arange(12)
a = a.reshape(3, 4)
print('Original array is:')
print(a)
print()
print('Modified array in C-style order:')
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
修改数组值
nditer对象有另一个可选参数,称为op_flags。其默认值为只读,但可以设置为读写或只写模式。这将启用使用此迭代器修改数组元素。
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print('Original array is:')
print(a)
print('\n')
for x in np.nditer(a, op_flags=['readwrite']):
x[...]=2*x
print('Modified array is:')
print(a)
输出:
Original array is:
[[ 0 5 10 15]
[20 25 30 35]
[40 45 50 55]]
Modified array is:
[[ 0 10 20 30]
[ 40 50 60 70]
[ 80 90 100 110]]
推荐:什么是NumPy
外部循环
编号 | 参数及说明 |
---|---|
1 | c_indexC_order索引可以被跟踪 |
2 | f_index跟踪 Fortran_order 索引 |
3 | multi-index可以跟踪每次迭代一个索引的类型 |
4 | external_loop导致给定的值是具有多个值的一维数组,而不是零维数组 |
广播迭代
如果两个数组是可广播的,则组合的nditer对象能够同时迭代它们。假设数组a 的维度为 3X4,并且还有另一个维度为 1X4 的数组b ,则使用以下类型的迭代器(数组b广播到 a 的大小)。
import numpy as np
x=np.arange(0,30,5)
arr1=x.reshape(2,3)
arr2=np.arange(3)
print("arr1:\n",arr1)
print('\n')
print("arr2:\n",arr2)
print("\n")
print("Iteration using Broadcasting:\n",)
for i,j in np.nditer([arr1,arr2]):
print(i,j)
输出:
arr1:
[[ 0 5 10]
[15 20 25]]
arr2:
[0 1 2]
Iteration using Broadcasting:
0 0
5 1
10 2
15 0
20 1
25 2
总结
本教程将教您NumPy遍历数组。数组使用 for 和 while 循环进行迭代。Nditer 是一个包含在 NumPy 包中的多维迭代器对象,可以高效地遍历数组。通过使用nditer 对象的一个可选参数,称为Op flags(操作数标志),我们可以修改数组值。广播数组迭代同时用于python中的迭代数组。
推荐:Numpy教程
Claude、Netflix、Midjourney、ChatGPT Plus、PS、Disney、Youtube、Office 365、多邻国Plus账号购买,ChatGPT API购买,优惠码XDBK,用户购买的时候输入优惠码可以打95折