Доступ к элементам массива и итерация в NumPy

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы научимся использовать объект 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 для одновременного перебора нескольких массивов.