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 на одномерных массивах:
- Читает из
stdinодну строку с двумя целыми числами:nиk— длина каждого изkодномерных векторов. - Создаёт
kодномерных массивов:i-й массив (iот0доk-1) равенnp.arange(i * n, (i + 1) * n)— shape(n,). - Объединяет все
kмассивов черезnp.concatenate(..., axis=0)→cat. Выводит строку:cat shape=<shape> ndim=<ndim>. - Складывает все
kмассивов черезnp.stack(..., axis=0)→st0. Выводит строку:st0 shape=<shape> ndim=<ndim>. - Складывает все
kмассивов черезnp.stack(..., axis=1)→st1. Выводит строку:st1 shape=<shape> ndim=<ndim>. - Выводит строку
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
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- NumPy stack: axis=0, 1 и 2 и форма результата
- dtype NumPy: целые и вещественные массивы, типы элементов
- NumPy shape, ndim, size и dtype: атрибуты массива и задача
- Срезы двумерного массива NumPy: строки, столбцы и шаг
- NumPy reshape и transpose: разница на примере и задача
- NumPy newaxis и squeeze: вектор-строка и вектор-столбец
