NumPy: вычисления и устройство массивов

Объединение массивов: concatenate и stack

Содержание курса

Практика np.concatenate по осям 0 и 1

Посмотрим, как работает concatenate на конкретном коде. Возьмём два двумерных массива одинаковой формы:

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])    # shape (2, 3)
b = np.array([[7, 8, 9], [10, 11, 12]]) # shape (2, 3)

# Склеиваем по оси 0 — добавляем строки
r0 = np.concatenate([a, b], axis=0)
print(r0.shape)  # (4, 3)
print(r0)
# [[ 1  2  3]
#  [ 4  5  6]
#  [ 7  8  9]
#  [10 11 12]]

# Склеиваем по оси 1 — добавляем столбцы
r1 = np.concatenate([a, b], axis=1)
print(r1.shape)  # (2, 6)
print(r1)
# [[ 1  2  3  7  8  9]
#  [ 4  5  6 10 11 12]]

При axis=0 массивы встают друг под другом: строк стало 2+2=4, а три столбца остались. При axis=1 — встают рядом: строки те же две, а столбцов стало 3+3=6.

Одномерный случай немного отличается — у вектора только одна ось, поэтому axis=0 единственный вариант:

x = np.array([1, 2, 3])  # shape (3,)
y = np.array([4, 5])     # shape (2,)

result = np.concatenate([x, y], axis=0)
print(result.shape)  # (5,)
print(result)        # [1 2 3 4 5]

Обратите внимание: здесь x и y имеют разные длины, и это нормально — по единственной оси размеры суммируются, никаких дополнительных ограничений нет.

Главное, что стоит закрепить из этих примеров: shape результата всегда можно посчитать вручную ещё до запуска. Берёте shape входных массивов, в позиции оси k складываете числа, по остальным позициям оставляете как есть. Если цифры не сходятся — NumPy выдаст ValueError ещё до того, как что-то пойдёт не так в логике программы.