给定两个 numpy 数组(矩阵)
A = np.linspace(1,9,9).reshape(3,3)
B = np.linspace(10,18,9).reshape(3,3)
我们可以通过以下方式将它们组合成块对角矩阵:
from scipy.linalg import block_diag
block_diag(A,B)
array([[ 1., 2., 3., 0., 0., 0.],
[ 4., 5., 6., 0., 0., 0.],
[ 7., 8., 9., 0., 0., 0.],
[ 0., 0., 0., 10., 11., 12.],
[ 0., 0., 0., 13., 14., 15.],
[ 0., 0., 0., 16., 17., 18.]])
我想知道是否有一种直接的方法来定义 A 和 B 的以下“重叠”类型矩阵:
array([[ 1., 2., 3., 0.],
[ 4., (10.+5.)/2, (6.+11.)/2, 12.],
[ 7., (13.+8.)/2, (14.+9.)/2, 15.],
[ 0., 16., 17., 18.]])
因此,我们不是将 A、B 放在对角线上,而是允许它们在一定程度上重叠,并对重叠中的元素进行平均。一般来说,我想指定重叠程度,因此在本例中重叠程度为 2。理想情况下我还希望保留稀疏结构,而不是构造整个数组。