> For the complete documentation index, see [llms.txt](https://bemind.gitbook.io/neural/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bemind.gitbook.io/neural/uchebniki-po-pandas-i-numpy/numpy/vyravnivanie-massiva-s-pomoshyu-numpy-flatten.md).

# Выравнивание массива с помощью NumPy flatten

В этом руководстве вы научитесь понижать размерность массива с помощью функции `flatten` в NumPy, что означает преобразование массива в одномерный массив. Функция `flatten` в NumPy позволяет превратить многомерный массив в одномерный. Функция позволяет легко понижать размерность массивов различными способами, включая по столбцам и по строкам.

К концу этого урока вы узнаете:

* Как сгладить массив NumPy по строкам
* Как сгладить массив NumPy по столбцам

Содержание

* [Понимание функции выравнивания NumPy](#ponimanie-funkcii-vyravnivaniya-numpy)
* [Сглаживание массива NumPy по строкам](#sglazhivanie-massiva-numpy-po-strokam)
* [Сглаживание массива NumPy по столбцам](#sglazhivanie-massiva-numpy-po-stolbcam)
* С[глаживание списка списков Python с помощью NumPy Flatten](#sglazhivanie-spiska-spiskov-python-s-pomoshyu-numpy-flatten)
* [Часто задаваемые вопросы](#chasto-zadavaemye-voprosy)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

### Понимание функции выравнивания NumPy

Перед тем как погрузиться в изучение использования функции `flatten` в NumPy, давайте рассмотрим, как эта функция работает. По сравнению с многими другими функциями NumPy, эта функция относительно проста.

Метод принимает один необязательный параметр, `order=`, который определяет способ плоского развертывания массива. Давайте рассмотрим определение метода:

```python
# Понимание метода flatten в NumPy
import numpy as np

ndarray.flatten(
   # Порядок фильтрования (по умолчанию - 'C')
   order='C'
)
```

В приведенном выше коде мы видим, что метод применяется к массиву. Метод возвращает копию входного массива, приведенную к одномерному виду.

Давайте быстро посмотрим, какие варианты доступны для параметра `order=`

* `'C'`, аргумент по умолчанию, преобразует массив в одномерный в стиле языка **C** (построчно).
* `'F'` плоско уплощает массив по столбцам (в стиле **Fortran**)
* `'A'` уплощает массив в порядке следования столбцов, если массив непрерывен в памяти.
* `'K'` плоский массив в порядке, в котором элементы находятся в памяти

В следующем разделе вы узнаете, как выполнить выпрямление массивов NumPy по строкам с помощью функции flatten из NumPy.

### Сглаживание массива NumPy по строкам

В этом разделе вы узнаете, как использовать метод flatten библиотеки NumPy для преобразования массива в одномерный, при котором элементы добавляются в соответствии с массивами, в которых они появляются. Для преобразования массивов в одномерный формат построчно можно использовать аргумент по умолчанию

Давайте посмотрим, как можно выполнить выравнивание массива NumPy по строкам:

```python
# Фильтрование массива по строкам
import numpy as np

arr = np.array([
    [1, 2, 3],
    [4, 5, 6]
]) # Массив чисел со встроенными двумерными структурами данных

flattened = arr.flatten() # Фильтрование массива по строкам
print(flattened) # Вывод фильтрованного массива

# Возвращает:
# [1 2 3 4 5 6]
```

Давайте разберем, что мы сделали в блоке кода выше:

1. Мы импортировали NumPy как `np`
2. Мы затем создали двумерный массив, `arr`
3. Затем мы создали новый массив `flattened`, который является результатом применения метода `.flatten()` к массиву.

**Важно отметить, что метод не изменяет оригинальный массив, но возвращает его разглаженную копию**.

### Сглаживание массива NumPy по столбцам

В этом разделе вы узнаете, как развернуть массив NumPy по столбцам, то есть элементы разворачиваются в том порядке, в котором они появляются. Это означает, что сначала разворачивается первый элемент каждого массива, затем второй и так далее.

Чтобы развернуть массив NumPy по столбцам, мы можем использовать аргумент `order='F'` в методе flatten.

```python
# Фильтрование массива по столбцам
import numpy as np

arr = np.array([
    [1, 2, 3],
    [4, 5, 6]
]) # Массив чисел со встроенными двумерными структурами данных

flattened = arr.flatten('F') # Фильтрование массива по столбцам (по умолчанию - порядок 'C')
print(flattened) # Вывод фильтрованного массива

# Возвращает:
# [1 4 2 5 3 6]
```

В следующем разделе вы узнаете, как использовать NumPy для преобразования списка списков в Python в плоский список с помощью метода flatten в NumPy.

### Сглаживание списка списков Python с помощью NumPy Flatten

Метод flatten в NumPy также может быть использован для выравнивания списка списков в Python. Основное ограничение здесь заключается в том, что, поскольку массивы NumPy могут содержать только числовые значения, он не может быть использован для всех типов списков списков.

Давайте посмотрим, как мы можем использовать метод flatten для преобразования в Python списка списков:

```python
# Фильтрование списка списков при помощи NumPy flatten()
import numpy as np

list_of_lists = [
    [1, 2, 3],
    [4, 5, 6]
] # Список из двух вложенных списков чисел

flattened = np.array(list_of_lists).flatten() # Преобразование списка в NumPy-массив и фильтрование его
print(list(flattened)) # Вывод фильтрованного списка в виде списка чисел

# Возвращает:
# [1, 2, 3, 4, 5, 6]
```

Точно так же, вы можете использовать различные аргументы, чтобы изменить способ, которым эти списки списков будут выпрямлены с помощью NumPy.

### Часто задаваемые вопросы

<details>

<summary>Почему NumPy не работает?</summary>

Метод `flatten` в NumPy не модифицирует массив, а возвращает копию массива. Это означает, что вам нужно присвоить копию новой переменной.

</details>

<details>

<summary>Чем NumPy Flatten отличается от NumPy Ravel и Reshape?</summary>

Оба метода `ravel()` и `reshape()` возвращают представление (view), если это возможно. Тем временем, метод `flatten()` возвращает копию.

</details>

<details>

<summary>NumPy выравнивается быстрее, чем NumPy ravel?</summary>

Метод `ravel()` в NumPy почти всегда работает быстрее, чем `flatten()`. Это связано с тем, что для создания копии Python сначала нужно выделить новую память.

</details>

### Заключение

В этом учебнике вы научились использовать метод `flatten()` библиотеки NumPy. Этот метод позволяет преобразовать многомерный массив в одномерный. Сначала вы узнали, как определен метод и какой параметр доступен. Затем вы научились использовать метод `flatten` для преобразования массива по столбцам и по строкам. Наконец, вы узнали, как использовать метод для преобразования списка списков.

### Дополнительные ресурсы

Чтобы узнать больше о схожих темах, ознакомьтесь с нижеприведенными учебными пособиями:

* [Стек NumPy: объединение массивов NumPy по разным осям](/neural/uchebniki-po-pandas-i-numpy/numpy/obedinenie-massivov-numpy-po-razlichnym-osyam-s-ispolzovaniem-funkcii-stack.md)
* [NumPy Squeeze: удаление размерности из массивов NumPy](/neural/uchebniki-po-pandas-i-numpy/numpy/udalenie-razmernosti-iz-massivov-numpy-s-pomoshyu-numpy-squeeze.md)
* [Функция повтора NumPy: повторение массивов NumPy](/neural/uchebniki-po-pandas-i-numpy/numpy/funkciya-np.repeat-numpy-povtorenie-massivov-numpy.md)
* [NumPy Pad: использование np.pad() для заполнения массивов и матриц](/neural/uchebniki-po-pandas-i-numpy/numpy/numpy-pad-ispolzovanie-np.pad-dlya-dopolneniya-massivov-i-matric.md)
* [NumPy Flatten: официальная документация](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.flatten.html)
