NumPy 矩阵数组的元素乘法

Dru*_*els 1 python arrays performance numpy matrix

我有两个 NumPy 数组(长度相等),每个数组都以(大小相等的方形)NumPy 矩阵作为元素。我想对这两个数组进行元素矩阵乘法,即返回一个数组,其中第 i 个元素是两个数组的第 i 个元素的矩阵乘积。

当我简单地尝试将数组相乘时,程序似乎尝试计算数组的矩阵乘积然后失败,因为它们的维数太高(数组为 1 + 其元素矩阵为 2)。

这个问题当然可以通过 for 循环来解决,但我希望有某种方法可以将所有内容保留在 NumPy 内部,以便充分利用其提高的效率。

编辑:

为了澄清一下,假设我有两个数组np.array([A, B, C])np.array([X, Y, Z])其中ABCX和都是 3x3 方阵,我需要的是一个将返回 的函数Y,其中是矩阵乘法。Znp.array([A*X, B*Y, C*Z])*

Mat*_*ith 5

对于数组,默认情况下运算符是“逐元素”的numpy。只需使用@运算符(矩阵乘法)而不是*

In [24]: A = np.arange(9).reshape(3,3)

In [25]: X = np.array([A[:], A[:]*2, A[:]*3])

In [26]: Y = X[:]

In [27]: X @ Y
Out[27]:
array([[[ 15,  18,  21],
        [ 42,  54,  66],
        [ 69,  90, 111]],

       [[ 60,  72,  84],
        [168, 216, 264],
        [276, 360, 444]],

       [[135, 162, 189],
        [378, 486, 594],
        [621, 810, 999]]])

In [28]: X[0] @ Y[0]
Out[28]:
array([[ 15,  18,  21],
       [ 42,  54,  66],
       [ 69,  90, 111]])

In [29]: X[1] @ Y[1]
Out[29]:
array([[ 60,  72,  84],
       [168, 216, 264],
       [276, 360, 444]])

In [30]: X[2] @ Y[2]
Out[30]:
array([[135, 162, 189],
       [378, 486, 594],
       [621, 810, 999]])
Run Code Online (Sandbox Code Playgroud)

HTH。