Итерация массивов NumPy

Итерация массива

Итерация означает итерирование элементов по одному.

Когда мы работаем с много мерными массивами в numpy, мы можем использовать базовый цикл for в python для выполнения этой операции.

Если мы итерируем 1-D массив, он будет итерировать каждый элемент по одному.

Пример

Итерировать элементы следующего одномерного массива:

import numpy as np
arr = np.array([1, 2, 3])
for x in arr:
  print(x)

Запуск примера

Итерировать 2-D массив

В 2-D массиве он будет итерировать все строки.

Пример

Итерировать элементы следующего двумерного массива:

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x in arr:
  print(x)

Запуск примера

Если мы итерируем n-D массив, он будет итерировать по одному измерению за раз.

Чтобы вернуть фактическое значение, скаляр,我们必须 итерировать массивы в каждом измерении.

Пример

Итерировать каждый скалярный элемент 2-D массива:

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x in arr:
  for y in x:
    print(y)

Запуск примера

Итерировать 3-D массив

В 3-D массиве он будет итерировать все 2-D массивы.

Пример

Итерировать элементы следующего 3-D массива:

import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
for x in arr:
  print(x)

Запуск примера

Чтобы вернуть фактическое значение, скаляр,我们必须 итерировать массивы в каждом измерении.

Пример

Итерировать до скаляра:

import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
for x in arr:
  for y in x:
    for z in y:
      print(z)

Запуск примера

Использование nditer() для итерации массива

Функция nditer() Это вспомогательная функция, которую можно использовать от очень базовой итерации до очень сложной итерации. Она решает некоторые из базовых проблем, с которыми мы сталкиваемся при итерации, и мы рассмотрим это на примерах.

Итерировать по каждому скалярному элементу

В базовом for В цикле, итерируя по каждому скалярному элементу массива, нам нужно использовать n for Цикл, для массивов с высокими измерениями может быть трудно написать.

Пример

Пройдемся по следующему 3-D массиву:

import numpy as np
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
for x in np.nditer(arr):
  print(x)

Запуск примера

Итерировать массивы различных типов данных

Мы можем использовать op_dtypes Параметр, передающий ожидаемый тип данных, чтобы изменить тип данных элемента при итерации.

NumPy не изменяет тип данных элементов в месте (элементы находятся в массиве), поэтому он требует дополнительного пространства для выполнения этой операции, которое называется буфером, чтобы в nditer() Чтобы включить его в flags=['buffered'].

Пример

Пробег по массиву в виде строки:

import numpy as np
arr = np.array([1, 2, 3])
for x in np.nditer(arr, flags=['buffered'], op_dtypes=['S'])
  print(x)

Запуск примера

Итерация с шагом

Мы можем использовать фильтрацию, а затем итерацию.

Пример

При каждом посещении скалярного элемента 2D массива пропускается 1 элемент:

import numpy as np
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for x in np.nditer(arr[:, ::2]):
  print(x)

Запуск примера

Итерация с использованием ndenumerate()

Перечисление - это упоминание вещей по порядку.

Иногда, в процессе итерации, нам нужно получить соответствующие индексы элементов, для таких случаев можно использовать ndenumerate() Метод.

Пример

Перечислите элементы следующего 1D массива:

import numpy as np
arr = np.array([1, 2, 3])
for idx, x in np.ndenumerate(arr):
  print(idx, x)

Запуск примера

Пример

Перечислите элементы следующей 2D массива:

import numpy as np
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for idx, x in np.ndenumerate(arr):
  print(idx, x)

Запуск примера