二维数组与三维数组中每个向量之间的Numpy矩阵乘法



我有一个3 × 3的numpy.ndarray,即H,和一个M × N × 3的numpy.ndarray,即a

我要做的是将H乘以每个向量在a .
import numpy as np
H = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])  # 3 x 3 matrix
A = np.array([[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]],
[[10, 11, 12],
[13, 14, 15],
[16, 17, 18]]])  # 2 x 3 x 3 matrix

例如,在上面的代码中,我想在H与[1, 2, 3],[4, 5, 6],…之间应用矩阵和向量乘法。,[16, 17, 18],它们是向量元素a .

因此,结果将是
np.array([[[14, 32, 50],     # H @ A[0, 0]
[32, 77, 122],    # H @ A[0, 1]
[50, 122, 194]],  # H @ A[0, 2]
[[68, 167, 266],   # H @ A[1, 0]
[86, 212, 338],   # H @ A[1, 1]
[104, 257, 410]]] # H @ A[1, 2]
)

当我广播H @ A时,H @ A[0]H @ A[1]被应用,这不是我所期望的。

有没有办法按我想要的方式广播?

您可以使用@运算符:

A @ H.T

array([[[ 14,  32,  50],
[ 32,  77, 122],
[ 50, 122, 194]],
[[ 68, 167, 266],
[ 86, 212, 338],
[104, 257, 410]]])