# Разделение NumPy: Разделение массива NumPy на части

В этом руководстве **вы научитесь использовать функцию разделения NumPy для разделения массива на части**. Умение работать с массивами и управлять ими в NumPy с помощью Python является важным навыком для всех, кто работает с данными.

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

* Назначение и использование функции `split()` в NumPy
* Как разделить массив NumPy на куски одинакового размера
* Как разделить массивы NumPy на куски разного размера
* Как разделить массивы NumPy по разным осям

**Хотите научиться разбивать список на части?** Ознакомьтесь с этим полным руководством по разделению списков в Python

Оглавление

* [Понимание функции разделения NumPy](#ponimanie-funkcii-razdeleniya-numpy)
* [Разделение массива NumPy на куски одинакового размера](#razdelenie-massiva-numpy-na-kuski-odinakovogo-razmera)
* [Разделение массива NumPy на фрагменты](#razdelenie-massiva-numpy-na-fragmenty)
* [Разделение массива NumPy по разным осям](#razdelenie-massiva-numpy-po-raznym-osyam)
* [Работа с ValueError в NumPy Split](#rabota-s-valueerror-v-numpy-split)
* [Заключение](#zaklyuchenie)

### Понимание функции разделения NumPy

Функция `split()` в NumPy принимает три параметра, два из которых обязательны. По умолчанию, необходимо передать массив, который вы хотите разделить, а также индексы или количество секций, на которые вы хотите его разделить. По желанию, вы также можете указать ось, которая по умолчанию равна 0.

{% hint style="info" %}
```
Код ниже показывает все различные параметры, которые доступны в функции:
```
{% endhint %}

```python
# Понимание функции np.split() из библиотеки NumPy
np.split(ary, indices_or_sections, axis=0)
```

Функция `np.split()` разделяет массив `ary` на подмассивы в соответствии с заданными индексами или количеством секций.

**Параметры:**

* `ary`: Исходный массив, который нужно разделить.
* `indices_or_sections`: Если это целое число, то массив разделится на столько равных по размеру подмассивов. Если это список или кортеж индексов, то массив будет разделен на подмассивы в этих местах.
* `axis`: Ось, вдоль которой будет происходить разделение (по умолчанию 0).

Функция `np.split()` возвращает список подмассивов.

На моем опыте, параметр оси используется редко. Тем не менее, важно знать о его наличии. Мы также рассмотрим его использование, чтобы все ваши базы были покрыты.

### Разделение массива NumPy на куски одинакового размера

Одно из самых простых применений функции **split** в NumPy - это разделение массива на несколько частей равного размера. Для этого используется параметр `indices_or_sections=`. \*\*Чтобы разделить массив на равные части, вы должны передать одно целое число, представляющее количество разделений

Давайте сначала создадим массив, используя функцию NumPy arange, которая создает последовательность чисел. Затем мы разделим массив на три части:

```python
# Разделение массива NumPy на подмассивы одинакового размера
import numpy as np

arr = np.arange(9)
arrs = np.split(arr, 3)
print(arrs)

# Returns:
# [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]
```

Этот код разделяет массив `arr` на три подмассива одинакового размера.

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

1. Сначала мы создаем массив NumPy под названием "arr" с использованием `np.arange(9)`, который создает массив со значениями от 0 до 8.
2. Мы затем используем функцию `np.split()` для разделения массива "arr" на 3 равные части.
3. Результирующие фрагменты сохраняются в новом массиве под названием "arrs".
4. Наконец, функция `print()` используется для отображения содержимого `arrs`, которое должно быть списком из 3 массивов NumPy, каждый из которых содержит 3 элемента.

Итак, блок кода разбивает массив NumPy на части равного размера и сохраняет получившиеся фрагменты в новом массиве. Теперь давайте посмотрим, как мы можем использовать функцию для разбиения массива в различных индексах.

### Разделение массива NumPy на фрагменты

В качестве альтернативы, вы можете передать список индексов, на которых следует разделить массив. Это может быть полезно, когда вы хотите создать несколько разных массивов из исходного массива в различных местах. Давайте рассмотрим пример:

```python
# Разделение массива NumPy по индексам
import numpy as np

arr = np.arange(9)
arrs = np.split(arr, [1, 5])
print(arrs)

# Returns:
# [array([0]), array([1, 2, 3, 4]), array([5, 6, 7, 8])]
```

Этот код разделяет массив `arr` на несколько подмассивов по заданным индексам: в первом месте, после первого элемента, и во втором месте, после пятого элемента.

Пример, приведенный выше, демонстрирует передачу списка индексов `[1, 5]`. Разделение исходного массива на сегменты происходит следующим образом:

* `[0:1]` – означает, что данные разделяются с начала до (но не включая) первого элемента.
* `[1:5]` – означает, что это включает первый до (но не включая) пятого индекса
* `[5:]` – означает, что включены элементы с пятого индекса до конца

Это намного проще и чище способ разделения массива на разные части с использованием срезов.

### Разделение массива NumPy по разным осям

Третий параметр используется для управления массивами NumPy по разным осям. По умолчанию параметр axis установлен на 0; изменяя его на 1, массивы разделяются по столбцам

Давайте создадим двумерный массив, накладывая массив на самого себя с помощью функции stack. Затем мы разделим массив вдоль первой оси.

```python
# Разделение массива по разным осям
import numpy as np

arr = np.arange(3)
arrs = np.stack([arr, arr, arr])
split = np.split(arrs, 3, axis=1)

print(split)

# Returns:
# [
#     array([[0],
#         [0],
#         [0]]), 
#     array([[1],
#         [1],
#         [1]]), 
#     array([[2],
#         [2],
#         [2]])
# ]
```

Этот код разделяет массив `arrs` по оси 1 на три подмассива. Каждый подмассив содержит один элемент из каждого из трех массивов, собранных в `arrs`.

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

Давайте теперь погрузимся в обработку ошибок, которые могут быть возвращены функцией.

### Работа с ValueError в NumPy Split

**Функция split библиотеки NumPy сгенерирует ошибку ValueError, если ей передано целое число, но массив не удается разделить на фрагменты равного размера.**

Давайте рассмотрим пример того, как это может произойти:

```python
# Разделение массива NumPy на подмассивы
import numpy as np

arr = np.arange(9)
arrs = np.split(arr, 2)
print(arrs)

# Raises:
# ValueError: array split does not result in an equal division
```

Этот код разделяет массив `arr` на два подмассива. Если массив не делится равномерно, возникает ошибка.

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

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

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

Кроме того, важно быть в курсе потенциальных ошибок, которые могут возникнуть при использовании функции, например, ошибка ValueError, возникающая при попытке разделить массив на неравные части. Овладев функцией разделения NumPy, вы будете лучше подготовлены к обработке и манипулированию данными в различных контекстах.
