Атрибут flat
Атрибут flat класса ndarray возвращает объект-итератор, который позволяет перебирать все элементы массива, независимо от его размерности, в порядке их физического хранения в памяти (по строкам, row-major или C-стиль). Этот итератор даёт возможность читать и изменять значения элементов массива, обращаясь к ним через последовательные индексы, как если бы массив был одномерным. Доступ к элементам через flat может быть полезен для быстрого обхода всех элементов без явного использования вложенных циклов.
Синтаксис
iterator = arr.flat
Пример
Давайте создадим двумерный массив и воспользуемся атрибутом flat для перебора всех его элементов по порядку:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for item in arr.flat:
print(item)
Результат выполнения кода:
1
2
3
4
5
6
Пример
Используем flat для изменения всех элементов массива, умножив каждый на 2:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for i, value in enumerate(arr.flat):
arr.flat[i] = value * 2
print(arr)
Результат выполнения кода:
[[ 2 4 6]
[ 8 10 12]]
Пример
Доступ к отдельным элементам по их позиции в плоском представлении с помощью индексной записи:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
first = arr.flat[0]
last = arr.flat[-1]
fourth = arr.flat[3]
print(first, last, fourth)
Результат выполнения кода:
1 6 4
Пример
Создание одномерного массива из элементов многомерного с использованием list и итератора:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
flat_list = list(arr.flat)
print(flat_list)
Результат выполнения кода:
[1, 2, 3, 4, 5, 6]