NumPy 数组元素遍历与访问

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,我们将学习如何使用 numpy.nditer 对象来遍历 NumPy 数组并访问其单个元素。我们还将学习如何使用 nditer 对象的 op_flags 参数来修改数组的元素。最后,我们将学习如何使用 nditer 对象在 NumPy 数组中进行广播(broadcasting)。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到 Notebook 标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟,直到 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,可以随时向 Labby 寻求帮助。实验结束后请提供反馈,我们将及时为你解决问题。

创建 ndarray 并使用 numpy.nditer 遍历它

在这一步中,我们将使用 arange() 方法创建一个一维 NumPy 数组,然后使用 numpy.nditer 对象对其进行遍历。

import numpy as np

a = np.arange(0,40,5)

print ("The Original array is:")
print (a)
print ('\n')

## showing elements of array one by one
print ("The Modified array is:")
for x in np.nditer(a):
    print(x)

遍历数组的转置

在这一步中,我们将创建一个二维 NumPy 数组,找到它的转置,并使用 nditer 对象对其进行遍历。

import numpy as np

a = np.array([[11,2,3,4],[29,4,15,6],[11,21,39,31]])
print("The array is :")
print(a)

print("The transpose of the array is :")
at = a.T
print(at)

print("Iterating over the array:")
for x in np.nditer(at):
    print(x, end=' ')

以 C 风格顺序和 F 风格顺序遍历数组

在这一步中,我们将创建一个二维 NumPy 数组,找到它的转置,然后使用 nditer 对象以 C 风格顺序和 F 风格顺序对其进行遍历。

import numpy as np

a = np.array([[1,2,3,4],[8,9,5,6],[10,20,29,31]])
print("\nPrinting the array:\n")
print(a)

print("\nPrinting the transpose of the array:\n")
at = a.T
print(at)

print("\nIterating over the transposed array in F-style order:\n")
for x in np.nditer(at, order='F'):
    print(x, end=' ')

print("\nIterating over the transposed array in C-style order:\n")
for x in np.nditer(at, order='C'):
    print(x, end=' ')

使用广播(broadcasting)遍历多个数组

在这一步中,我们将创建两个不同维度的 NumPy 数组,并使用 nditer 对象通过广播(broadcasting)对它们进行遍历。

import numpy as np

a = np.arange(0,60,5)
a = a.reshape(3,4)

print ('The First array :')
print (a)
print ('\n')

print ('The Second array is')
b = np.array([1, 2, 3, 4], dtype = int)
print (b)
print ('\n' )

print ('The Modified array is')
for x,y in np.nditer([a,b]):
    print ("%d:%d" %(x,y))

使用 op_flags 修改数组的值

在这一步中,我们将创建一个一维 NumPy 数组,使用 nditer 对象遍历它,同时将 op_flags 参数设置为 'readwrite',并在遍历时修改数组的元素。

import numpy as np

a = np.arange(0,50,6)
a = a.reshape(3,3)

print ('The Original array is:')
print (a)
print ('\n')

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

print ('The Modified array is:')
print (a)

总结

在本实验中,我们学习了如何使用 NumPy 中的 nditer 对象遍历数组,以及如何在遍历过程中使用 op_flags 参数修改数组的元素。我们还学习了如何使用 nditer 对象在 NumPy 数组中实现广播(broadcasting),以同时遍历多个数组。