Введение
В этом практическом занятии мы научимся использовать объект numpy.nditer для перебора элементов NumPy-массива и доступа к отдельным элементам. Также мы узнаем, как изменять элементы массива с использованием параметра op_flags объекта nditer. Наконец, мы изучим механизм "распространения" (broadcasting) в NumPy-массивах с использованием объекта nditer.
Советы по использованию ВМ
После запуска виртуальной машины кликните в левом верхнем углу, чтобы переключиться на вкладку Notebook и приступить к практике в Jupyter Notebook.
Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Создать ndarray и перебрать его с использованием numpy.nditer
В этом шаге мы создадим одномерный NumPy-массив с использованием метода arange(), а затем переберем его с использованием объекта 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-массив, найдем его транспонированную матрицу, а затем переберем ее в как C-стиле, так и F-стиле порядка с использованием объекта nditer.
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-массива с разными измерениями и переберем их с использованием механизма "распространения" (broadcasting) с объектом nditer.
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)
Резюме
В этом практическом занятии мы узнали, как использовать объект nditer в NumPy для перебора массивов, и как изменять элементы массива во время перебора с использованием параметра op_flags. Мы также изучили механизм "распространения" (broadcasting) в NumPy-массивах с использованием объекта nditer для одновременного перебора нескольких массивов.