Объединение массивов: concatenate и stack
Содержание курса
Разница между concatenate и stack: алгоритм проверки shape
Оба инструмента объединяют массивы, но делают это принципиально по-разному. np.concatenate работает с уже существующими осями: число измерений результата совпадает с числом измерений входных массивов, а один из размеров увеличивается. np.stack создаёт новую ось: результат всегда имеет на одно измерение больше, чем входные.
Это различие хорошо видно на одномерных векторах:
np.concatenate([a, b], axis=0)для двух векторов shape(n,)даёт shape(2n,)— один длинный вектор.np.stack([a, b], axis=0)для тех же векторов даёт shape(2, n)— матрицу из двух строк.
Результаты морфологически разные, хотя данные «те же самые».
Алгоритм предсказания shape для concatenate
Чтобы узнать shape результата до запуска кода, достаточно трёх шагов:
- Выпишите shape каждого входного массива.
- Убедитесь, что по всем осям, кроме
k, размеры совпадают — иначе будетValueError. - По оси
kсложите соответствующие размеры всех входных массивов; по остальным осям оставьте размер как есть.
Пример: массивы (2, 3) и (2, 3) при axis=0 → складываем первые числа: 2+2=4, второе остаётся 3 → результат (4, 3).
Алгоритм предсказания shape для stack
- Убедитесь, что все входные массивы имеют строго одинаковую shape.
- Возьмите исходный кортеж shape.
- Вставьте число массивов
nв позициюkэтого кортежа.
Пример: два массива (3, 4) при axis=1 → берём (3, 4), вставляем 2 на позицию 1 → (3, 2, 4).
Этот алгоритм работает для любого числа осей и любого числа складываемых массивов. Если складываете пять массивов shape (6, 7) через np.stack(axis=0), результат — (5, 6, 7): число массивов на нулевую позицию, исходная форма следом.
Главный практический вопрос при выборе между двумя функциями: нужно ли сохранить число осей или добавить новое измерение? Если нужно просто удлинить — concatenate. Если нужно «сложить в стопку» с сохранением структуры каждого массива — stack.
