NumPy遍历数组

NumPy遍历数组

NumPy遍历数组

  NumPy 包包含一个迭代器对象numpy.nditer。它是一个高效的多维迭代器对象,使用它可以迭代数组。使用 Python编程的标准迭代器接口访问数组的每个元素。本文,为你介绍NumPy遍历数组。

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

外部循环

编号参数及说明
1c_indexC_order索引可以被跟踪
2f_index跟踪 Fortran_order 索引
3multi-index可以跟踪每次迭代一个索引的类型
4external_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 Broadcast广播

总结

  本教程将教您NumPy遍历数组。数组使用 for 和 while 循环进行迭代。Nditer 是一个包含在 NumPy 包中的多维迭代器对象,可以高效地遍历数组。通过使用nditer 对象的一个​​可选参数,称为Op flags(操作数标志),我们可以修改数组值。广播数组迭代同时用于python中的迭代数组。

  推荐:Numpy教程


晓得博客,版权所有丨如未注明,均为原创
晓得博客 » NumPy遍历数组

转载请保留链接:https://www.pythonthree.com/numpy-iterating-over-array/

滚动至顶部