# Функция np.repeat() NumPy: Повторение массивов NumPy

В этом руководстве вы научитесь использовать функцию повторения NumPy - `np.repeat()`. Функция `np.repeat()` используется для повторения массивов и предоставляет значительные возможности для настройки того, как массивы повторяются. Умение работать с массивами NumPy является важным навыком для анализа данных, науки о данных и глубокого обучения.

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

* Как работает функция повтора NumPy
* Как повторять массивы NumPy по строкам и по столбцам
* Как повторить многомерные данные в NumPy

Оглавление

* [Понимание функции повтора NumPy](#ponimanie-funkcii-povtora-numpy)
* [Повторение одномерного массива NumPy](#povtorenie-odnomernogo-massiva-numpy)
* [Повторение двумерного массива NumPy](#povtorenie-dvumernogo-massiva-numpy)
* [Повторение массива NumPy построчно](#povtorenie-massiva-numpy-postrochno)
* [Повторение массива NumPy по столбцам](#povtorenie-massiva-numpy-po-stolbcam)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#additional-resources)

### Понимание функции повтора NumPy

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

```python
# Понимание синтаксиса функции np.repeat()
np.repeat(
    # Аргумент, который будет повторен
   a, 
    # Количество раз, на которое аргумент должен быть повторен
   repeats, 
    # Набор индексов, по которым повторение будет производиться (по умолчанию - все измерения)
   axis=None
)
```

Мы видим из приведенного выше блока кода, что функция имеет три различных параметра. Давайте посмотрим, что делает каждый из них:

* `a=` принимает входной массив
* `repeats=` определяет количество повторений для каждого элемента
* `axis=` определяет ось, вдоль которой будут повторяться значения. Если `None`, используется плоский массив в качестве входных данных и возвращается плоский массив.

### Повторение одномерного массива NumPy

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

```python
# Повторение одномерного массива при помощи np.repeat()
import numpy as np

arr = np.array([1, 2, 3]) # Одномерный массив из трех элементов
print(np.repeat(arr, 2)) # Вывод повторенного массива

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

В приведенном выше примере мы передаем одномерный массив NumPy в функцию `repeat()`. Также мы указываем функции повторить каждый элемент дважды.

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

### Повторение двумерного массива NumPy

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

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

Давайте рассмотрим пример для лучшего понимания:

```python
# Повторение двумерного NumPy-массива при помощи np.repeat()
import numpy as np

arr = np.array([[1,2],[3,4]]) # Двумерный массив из двух строк и двух столбцов
print(np.repeat(arr, 2)) # Вывод повторенного массива

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

В приведенном выше примере видно, что сначала значения преобразуются в одномерный массив, а затем повторяются. Это происходит потому, что параметр `axis` по умолчанию установлен в

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

### Повторение массива NumPy построчно

Во многих случаях вам может не потребоваться повторять многомерный массив в его уплощенной версии. Вы можете настроить это поведение, изменив параметр `axis`

В NumPy, ось с индексом 0 представляет строки. Давайте передадим `0` в параметр `axis` и посмотрим, как это изменит поведение:

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

arr = np.array([[1,2],[3,4]]) # Двумерный массив из двух строк и двух столбцов
print(np.repeat(arr, 2, axis=0)) # Вывод повторенного массива с повторением по строкам (по умолчанию)

# Возвращает:
# [[1 2]
# [3 4]]
# 
# Это не то, что ожидалось. Правильный результат будет ниже.
```

В приведенном выше примере мы передали тот же двумерный массив и повторили его дважды вдоль нулевой оси. В этом случае каждая "строка" повторяется.

В следующем разделе вы узнаете, как повторять элементы в столбцах.

### Повторение массива NumPy по столбцам

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

Давайте посмотрим, как мы можем изменить поведение параметра `axis`, чтобы достичь этого:

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

arr = np.array([[1,2],[3,4]]) # Двумерный массив из двух строк и двух столбцов
print(np.repeat(arr, 2, axis=1)) # Вывод повторенного массива с повторением по столбцам

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

Здесь мы видим, что каждый «столбец» массива повторяется.

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

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

Затем вы научились использовать функцию с двумерными массивами. По умолчанию функция выпрямляет массив и повторяет элементы. Модифицируя поведение функции, можно использовать функцию для повторения элементов по строкам или столбцам.

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

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

* [NumPy Pad: использование `np.pad()` для заполнения массивов и матриц](https://bemind.gitbook.io/neural/uchebniki-po-pandas-i-numpy/numpy/numpy-pad-ispolzovanie-np.pad-dlya-dopolneniya-massivov-i-matric)
* NumPy где: обрабатывать элементы массива условно
* [`np.argmax()`: Как использовать NumPy Argmax](https://bemind.gitbook.io/neural/uchebniki-po-pandas-i-numpy/numpy/np.argmax-kak-ispolzovat-numpy-argmax)
* [NumPy linspace: создание равномерно расположенных массивов с помощью `np.linspace`](https://bemind.gitbook.io/neural/uchebniki-po-pandas-i-numpy/numpy/numpy-linspace-sozdanie-ravnomerno-raspolozhennykh-massivov-s-pomoshyu-np.linspace)
* [Повтор NumPy: официальная документация](https://numpy.org/doc/stable/reference/generated/numpy.repeat.html)
