Объединение массивов: 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 ещё до того, как что-то пойдёт не так в логике программы.
