我如何有效地构建这个矩阵?

How do I construct this matrix in an efficient way?

我有一个维度为 (T,k) 的矩阵 A。我想为正整数 mt1, t2 < T 构建以下分块矩阵:

这里,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))

尝试将 fliplr(A) 的克罗内克积与 eye(m) 结合使用,例如:

import numpy as np

A = np.array([[1,2,3],[4,5,6]])
Im = np.eye(3)
R = np.kron(np.fliplr(A), Im)

print('A:\n', A)
print('Im:\n', Im)
print('R:\n', R)

打印

A:
 [[1 2 3]
 [4 5 6]]
Im:
 [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
R:
 [[3. 0. 0. 2. 0. 0. 1. 0. 0.]
 [0. 3. 0. 0. 2. 0. 0. 1. 0.]
 [0. 0. 3. 0. 0. 2. 0. 0. 1.]
 [6. 0. 0. 5. 0. 0. 4. 0. 0.]
 [0. 6. 0. 0. 5. 0. 0. 4. 0.]
 [0. 0. 6. 0. 0. 5. 0. 0. 4.]]