Как вставить матрицу в другую матрицу - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь создать функцию для вставки матрицы в другую (квадратная матрица), например:

A = [(1,2,3),(4,5,6),(7,8,9)]
B = [(2,4),(6,8)]

C = funcmatrix(A,B)

result: [1 2 3 0 0
         4 5 6 0 0
         7 8 9 0 0
         0 0 0 2 4
         0 0 0 6 8]  

Ответы [ 3 ]

1 голос
/ 20 февраля 2020
import numpy as np

A = np.array([(1,2,3),(4,5,6),(7,8,9)])
B = np.array([(2,4),(6,8)])

combined = np.block([[A, np.zeros((len(A), len(B)))], 
                     [np.zeros((len(B), len(A))), B]])

Out:

array([[1., 2., 3., 0., 0.],
       [4., 5., 6., 0., 0.],
       [7., 8., 9., 0., 0.],
       [0., 0., 0., 2., 4.],
       [0., 0., 0., 6., 8.]])

Пожалуйста, обратитесь к документам .

0 голосов
/ 20 февраля 2020

Согласно комментарию scleronomi c, block_diag должен добиться цели:

A = [(1,2,3),(4,5,6),(7,8,9)]
B = [(2,4),(6,8)]

import numpy as np
from scipy.linalg import block_diag

block_diag(np.array(A), np.array(B))

дает:

array([[1, 2, 3, 0, 0],
       [4, 5, 6, 0, 0],
       [7, 8, 9, 0, 0],
       [0, 0, 0, 2, 4],
       [0, 0, 0, 6, 8]])
0 голосов
/ 20 февраля 2020

Другой подход, использующий numpy Я нашел:

A = np.array([[1,2,3],[4,5,6],[7,8,9]])
B = np.array([[2,4],[6,8]])
bshape = B.shape
ashape = A.shape

a=np.append(A,np.zeros((bshape[0],ashape[0])),axis=0)
b=np.append(np.zeros((ashape[0],bshape[0])),B,axis=0)

Теперь добавьте их вместе:

np.append(a,b,axis=-1)

Надеюсь, это сработает в вашем случае

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