在python中组装矩阵(scipy/numpy)



我想知道是否有一种简单的方法可以在 python 中沿对角线组装矩阵,如果它们重叠,则添加值。这是我从 Matlab 论坛上偷来的一张方便的图表:https://i.stack.imgur.com/ZunrZ.jpg

目前,我正在尝试实现它以使用一定数量的 2x2 矩阵,但最终目标是使代码组装任意数量的任意大小矩阵(所有相同大小的 ofc.,最大 4x4(。

我不确定如何矢量化它,但你可以使用 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

首先是一个在 5x5 大矩阵上有两个 2x2 矩阵的示例:

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.]])

一般来说,如果你有一个M零的 KxK 矩阵,并且 K-r+1 rxrmatrices在某些可索引的矩阵中,你可以

for i in range(K-r+1): 
M[i+r:i+r] += matrices[i]

最新更新