用一列替换每一行

Replacing each row with a column

给定一个形状为 (n, m) 的数组 X 和另一个给定的数字 l 我怎样才能得到一个形状为 (n, l, m, l) 的数组 Y 其中 Y[i, j, :, :] 是已将第 j 列替换为 X 的第 i 行的空矩阵。

例如,如果

X = np.array([
    [1, 2, 3, 4],
    [2, 3, 4, 5],
    [3, 4, 5, 6]])
l = 5

然后

Y[2, 3] = np.array([
    [0, 0, 0, 3, 0],
    [0, 0, 0, 4, 0],
    [0, 0, 0, 5, 0],
    [0, 0, 0, 6, 0]
])

谢谢。

使用np.einsum:

Y = np.zeros((n, l, m, l))
np.einsum('ijkj->jik', Y)[...] = X