我正在寻找一种将nXaXb的numpy数组转换为块对角矩阵的方法。我已经了解到scipy.linalg.block_diag,但它的缺点是(对于我的情况)需要分别给出矩阵的每个块。然而,当n非常高时,这是具有挑战性的,因此为了使事情更清晰,假设我有一个
import numpy as np
a = np.random.rand(3,2,2)
array([[[ 0.33599705, 0.92803544],
[ 0.6087729 , 0.8557143 ]],
[[ 0.81496749, 0.15694689],
[ 0.87476697, 0.67761456]],
[[ 0.11375185, 0.32927167],
[ 0.3456032 , 0.48672131]]])
我想要实现的是与以下内容相同的东西
from scipy.linalg import block_diag
block_diag(a[0], a[1],a[2])
array([[ 0.33599705, 0.92803544, 0. , 0. , 0. , 0. ],
[ 0.6087729 , 0.8557143 , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0.81496749, 0.15694689, 0. , 0. ],
[ 0. , 0. , 0.87476697, 0.67761456, 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0.11375185, 0.32927167],
[ 0. , 0. , 0. , 0. , 0.3456032 , 0.48672131]])
这只是一个例子,实际情况下a可能有数百个元素。
(b == c).all()
或np.allclose(b,c)
的结果。) - DSM