NumPy concatenate и stack: чем отличаются shape и axis

np.concatenate соединяет массивы вдоль существующей оси, а np.stack создаёт новую ось. Поэтому объединение одинаковых векторов этими функциями даёт разные shape и ndim.

Объединение и новая ось

Для двух векторов формы (3,) concatenate вернёт вектор (6,). stack(..., axis=0) создаст матрицу (2, 3), а stack(..., axis=1) — матрицу (3, 2).

У stack формы входных массивов должны совпадать. У concatenate размеры должны совпадать по всем осям, кроме оси соединения. Если нужна двумерная таблица из векторов, сначала решите, должны они стать строками или столбцами.

Пример на других данных

import numpy as np
x = np.array([2, 4, 6])
y = np.array([8, 10, 12])
print(np.concatenate([x, y]).shape)
print(np.stack([x, y], axis=0).shape)
print(np.stack([x, y], axis=1).tolist())

Результат:

(6,)
(2, 3)
[[2, 8], [4, 10], [6, 12]]

Попробуйте сами

Ниже — отдельное упражнение: напишите код и запустите проверку. Другие упражнения по этой теме. Для обучения по порядку откройте бесплатный курс NumPy и pandas.

concatenate vs stack на одномерных векторах: разница в ndim и shape

Что уже дано

Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.

Что нужно сделать

Напишите программу, которая наглядно показывает разницу между np.concatenate и np.stack на одномерных массивах:

  1. Читает из stdin одну строку с двумя целыми числами: n и k — длина каждого из k одномерных векторов.
  2. Создаёт k одномерных массивов: i-й массив (i от 0 до k-1) равен np.arange(i * n, (i + 1) * n) — shape (n,).
  3. Объединяет все k массивов через np.concatenate(..., axis=0) → cat. Выводит строку: cat shape=<shape> ndim=<ndim>.
  4. Складывает все k массивов через np.stack(..., axis=0) → st0. Выводит строку: st0 shape=<shape> ndim=<ndim>.
  5. Складывает все k массивов через np.stack(..., axis=1) → st1. Выводит строку: st1 shape=<shape> ndim=<ndim>.
  6. Выводит строку ndim_diff=<d>, где <d> — разница st0.ndim - cat.ndim.

Shape выводите в виде Python-кортежа, например (6,) или (2, 3).

Ввод и вывод

Программа читает stdin и пишет в stdout.

Формат ввода

Одна строка: два целых числа n k, разделённых пробелом. Гарантируется n >= 2, k >= 2.

Формат вывода

Четыре строки:

cat shape=<shape> ndim=<ndim>
st0 shape=<shape> ndim=<ndim>
st1 shape=<shape> ndim=<ndim>
ndim_diff=<d>

Пример

Ввод
3 2
Вывод
cat shape=(6,) ndim=1
st0 shape=(2, 3) ndim=2
st1 shape=(3, 2) ndim=2
ndim_diff=1
РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи