2D 数组与 3D 数组中的每个向量之间的 Numpy 矩阵乘法

Numpy matrix multiplication between a 2D array and each vector in 3D array

我有一个 3 x 3 numpy.ndarray,即 H,和一个 M x N x 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]之间应用矩阵和向量乘法,它们是向量元素 of 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]]])