我想知道在Python中是否有一种简便的方法来沿对角线组装矩阵,如果它们重叠,则添加值。这是我从Matlab论坛偷来的一个方便的图示:https://istack.dev59.com/ZunrZ.webp
目前,我正在尝试使用一组预定数量的2x2矩阵来实现它,但最终目标是使代码组装任意数量和任意大小的矩阵(当然都是相同大小的,最大为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
,以及K-r+1个rxr大小的可索引矩阵
,您可以执行以下操作:for i in range(K-r+1):
M[i+r:i+r] += matrices[i]
scipy.sparse
在将coo
格式矩阵转换为csr
格式矩阵时会执行此操作,与MATLAB处理其稀疏矩阵的方式非常相似。 - hpaulj