Сборка матриц в питоне (scipy / numpy) - PullRequest
0 голосов
/ 08 мая 2018

Мне было интересно, есть ли простой способ собрать матрицы вдоль диагонали в python, добавляя значения, если они перекрываются. Вот удобная диаграмма, которую я украл с форума Matlab: https://i.stack.imgur.com/ZunrZ.jpg

В настоящее время я пытаюсь реализовать его для работы с заданным количеством матриц 2x2, но конечная цель - заставить код собрать произвольное количество матриц произвольного размера (все одинакового размера c., Максимум 4x4).

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Сначала приведем пример с двумя матрицами 2x2 на большой матрице 5x5:

import numpy as np
M = np.zeros((5,5))
M1 = np.matrix([[1,2],[3,4]])
M2 = np.matrix([[1,2],[3,4]])
M[:2,:2] += M1
M[1:3, 1:3] += M2
M

выходы

array([[ 1.,  2.,  0.,  0.,  0.],
   [ 3.,  5.,  2.,  0.,  0.],
   [ 0.,  3.,  4.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.]])

В общем, если у вас есть матрица KxK с нулями M и K-r + 1 rxr matrices в некотором индексируемом, вы можете сделать

for i in range(K-r+1): 
    M[i+r:i+r] += matrices[i]
0 голосов
/ 08 мая 2018

Я не уверен, как это векторизовать, но вы можете сделать это довольно напрямую с помощью setitem:

k = k1 = np.array([[1,2],[3,4]])   # etc
ks = [k1, k2, k3, k4]
[n] = set(k.shape)
N = len(ks)
A = np.zeros((N+1, N+1))
for i, k in enumerate(ks):
    A[i:i+n, i:i+n] += k
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...