广播如何用于数字数组和块矩阵之间的乘法运算?

How does broadcasting work for multiplication between an array of numbers and a block matrix?

我有一个包含 n 个浮点数的数组 [a, b, ..., z] 和一个块矩阵 [II, X, Y, Z] 其中 IIXYZ都是2x2矩阵。

II = np.identity(2, dtype=complex)
X = np.array([[0, 1], [1, 0]], dtype=complex)
Y = np.array([[0, -1j], [1j, 0]], dtype=complex)
Z = np.array([[1, 0], [0, -1]], dtype=complex)

我的问题是如何将浮点数数组 [a, b, ..., z] 乘以块矩阵 [II, X, Y, Z] 以便它广播到:

[[a*II, a*X, a*Y, a*Z]
 [b*II, b*X, b*Y, b*Z]
 ....................
 [z*II, z*X, z*Y, z*Z]]

形状为 (n,4,2,2)?

您只需确保尺寸匹配即可。这是一个例子:

mult = np.array([1,2,3,4,5])
conc = np.array([II,X,Y,Z])
res = conc.reshape(((1,)+conc.shape)) * mult.reshape((len(mult),1,1,1))
print(res.shape)

输出:

(5, 4, 2, 2)