У меня есть матрица A
с размерностью (T,k)
. Я хочу построить следующую блочную матрицу для натуральных чисел m
и t1, t2 < T
:
\ begin {align *} \ begin {bmatrix} A [t_2,1] I_m & A [{t_2 -1}, 1] I_m & \ dots & A [{t_1}, 1] I_m \\ A [t_2,2 ] I_m & A [{t_2 -1}, 2] I_m & \ dots & A [{t_1}, 2] I_m \\ \ vdots \\ A [t_2, k] I_m & A [{t_2 -1}, k ] I_m & \ dots & A [{t_1}, k] I_m \ end {bmatrix} \ end {align *}
Здесь Im
- единичная матрица измерения m
, а A[t,i]Im
- диагональная матрица со всеми диагональными элементами, равными A[t,i]
. Есть ли эффективный способ написать это, возможно, без каких-либо петель? Вот мой текущий код (настройка t2 = t, t1 = 0
), но он очень неэффективен
B = np.zeros([k*m,t*m])
for i in range(filter_count):
for j in range(t):
B[i*m:(i+1)*m,j*m:(j+1)*m] = np.diag(np.repeat([A[t-j,i]],m))