Чтобы состыковать две двухмерные маирицы ве5ртикально в Python
Ответ нейросети
01 ноября 2025 10:49
Замечание по задаче
- Чтобы состыковать две двумерные матрицы вертикально, нужно разместить матрицы одну под другой. Это возможно только если число столбцов в обеих матрицах одинаковое.
Ниже дам подробное решение и несколько вариантов реализации на Python (без библиотек и с NumPy), с пошаговым объяснением и примерами.
- Чистый Python (матрицы как списки списков)
Принцип
- Проверяем, что у обеих матриц одинаковое число столбцов.
- Складываем строки так, чтобы сначала шли строки A, затем строки B. Это и получится вертикальное «слоение».
Пример кода
- Проверяем мерности и затем выполняем конкатенацию по осям.
def vertical_stack(A, B): # A и B — матрицы в виде списков списков if not isinstance(A, list) or not isinstance(B, list): raise TypeError("A и B должны быть списками (матрицами).") if any(not isinstance(row, list) for row in A) or any(not isinstance(row, list) for row in B): raise TypeError("A и B должны быть матрицами (списками списков).")
# Обработаем случаи пустых матриц
if not A and not B:
return []
if not A:
# B остается как есть (если в B все строки одной длины)
return B
if not B:
return A
a_cols = len(A[0])
b_cols = len(B[0])
# Проверки: все строки внутри каждой матрицы должны иметь одну и ту же длину
if any(len(r) != a_cols for r in A) or any(len(r) != b_cols for r in B):
raise ValueError("Все строки в каждой матрице должны иметь одинаковую длину.")
# Проверка совместимости по числу столбцов
if a_cols != b_cols:
raise ValueError("Число столбцов должно быть одинаковым у обеих матриц.")
# Вертикальное стекование: просто конкатенация списков
return A + B
Пример использования A = [ [1, 2, 3], [4, 5, 6] ] B = [ [7, 8, 9], [10, 11, 12] ] C = vertical_stack(A, B) print(C)
Результат:
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
- С использованием NumPy
Если есть возможность установить NumPy, это удобнее и надёжнее для матричных операций.
Принцип
- Преобразуем входы в массивы 2D и используем vstack (или concatenate по axis=0).
Пример кода import numpy as np
def vertical_stack_numpy(A, B): a = np.asarray(A) b = np.asarray(B)
if a.ndim != 2 or b.ndim != 2:
raise ValueError("A и B должны быть двумерными массивами.")
if a.shape[1] != b.shape[1]:
raise ValueError("Число столбцов должно быть одинаковым.")
return np.vstack((a, b))
Пример использования A = [ [1, 2, 3], [4, 5, 6] ] B = [ [7, 8, 9], [10, 11, 12] ] C = vertical_stack_numpy(A, B) print(C)
Результат:
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
- Быстрый способ без явной проверки (вариант ошибки по живой конкатенации)
Если уверены, что входные матрицы корректны и имеют одинаковое число столбцов, можно просто сделать конкатенацию по строкам:
- Для списков: C = A + B
- Для NumPy: C = np.vstack((A, B)) или C = np.concatenate((A, B), axis=0)
Пример с чистым Python A = [ [1, 2], [3, 4] ] B = [ [5, 6], [7, 8] ] C = A + B # результат: [[1,2],[3,4],[5,6],[7,8]]
Важные моменты, которые стоит помнить
- Число столбцов должно совпадать: len(A[0]) == len(B[0]).
- Все строки внутри каждой матрицы должны иметь одинаковую длину.
- Пустые матрицы: если обе пустые, результат пустой список; если одна пустая, можно вернуть другую матрицу как есть (после соответствующих проверок).
- При использовании NumPy нет нужды вручную проверять размеры, но полезно держать в уме совместимость по числу столбцов.
Если хочешь, можешь прислать конкретные матрицы (или их размерности), скажу, как лучше их стыковать и приведу готовый код под твой случай.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



