我正在寻找一种将 nXaXb numpy 数组转换为块对角矩阵的方法。我已经遇到过scipy.linalg.block_diag http://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.linalg.block_diag.html,其缺点(对于我的情况)是它需要单独给出矩阵的每个块。然而,当 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 有数百个元素。