Итерация массива NumPy
Итерация массивов
Итерация означает просмотр элементов один за другим.
Поскольку мы имеем дело с многомерными массивами в numpy, мы можем сделать это, используя базовый
for
цикл python.
Если мы повторяем одномерный массив, он будет проходить каждый элемент один за другим.
Пример
Повторите элементы следующего одномерного массива:
import numpy as np
arr = np.array([1, 2, 3])
for x in arr:
print(x)
Итерация двумерных массивов
В двумерном массиве он будет проходить через все строки.
Пример
Повторите элементы следующего двумерного массива:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x
in arr:
print(x)
Если мы повторяем массив n -D, он будет проходить n-1-е измерение одно за другим.
Чтобы вернуть фактические значения, скаляры, мы должны перебрать массивы в каждом измерении.
Пример
Итерация по каждому скалярному элементу двумерного массива:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x
in arr:
for y in x:
print(y)
Итерация трехмерных массивов
В трехмерном массиве он пройдет через все двумерные массивы.
Пример
Повторите элементы следующего трехмерного массива:
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
циклов, которые может быть сложно написать для массивов с очень большой размерностью.
Пример
Переберите следующий трехмерный массив:
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()
метод может использоваться для этих случаев использования.
Пример
Перечислить следующие элементы одномерных массивов:
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)