Как объединить два 2D-массива в следующие в Python? - PullRequest
0 голосов
/ 02 июня 2018

Предположим, у меня есть 2 двумерных массива следующим образом:

A = [[1, 2],
     [3, 4]]

B = [[5, 6, 7],
     [8, 9, 8],
     [7, 6, 5]]

Есть ли функция numpy для объединения A и B в C следующим образом?

C = [[1, 2, 0, 0, 0],
     [3, 4, 0, 0, 0],
     [0, 0, 5, 6, 7],
     [0, 0, 8, 9, 8],
     [0, 0, 7, 6, 5]]

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Если вы собираетесь выполнять много линейных алгебраических операций, NumPy / SciPy станет вашим другом.Для конкретной проблемы создания блочных диагональных матриц scipy.linalg.block_diag сохраняет день:

In [14]: from scipy.linalg import block_diag

In [16]: A = [[1, 2],
    ...:      [3, 4]]
    ...:

In [17]: B = [[5, 6, 7],
    ...:      [8, 9, 60],
    ...:      [10, 20, 0]]
    ...:

In [18]: block_diag(A, B)
Out[18]:
array([[ 1,  2,  0,  0,  0],
       [ 3,  4,  0,  0,  0],
       [ 0,  0,  5,  6,  7],
       [ 0,  0,  8,  9, 60],
       [ 0,  0, 10, 20,  0]], dtype=int32)

В противном случае (правка: отметив, что вопрос в его первоначальной форме фактически не указывал, чтожелаемое решение включало NumPy), если вы просто хотите сделать это с ванильным Python, предполагая, что все блоки квадратные, вы можете сделать что-то вроде

[a + [0]*len(B) for a in A] + [[0]*len(A) + b for b in B]
0 голосов
/ 02 июня 2018

Вы можете разработать собственную программу, чтобы сделать это, это не должно быть слишком сложно.

Вот несколько начальных шагов:

  1. Фронт добавляет 0 во всех элементахиз A и обратно добавить 0 во всех элементах B, чтобы сделать их длины равными.

  2. Затем просто введите значения A и B в полученную матрицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...