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])其中A、B、C、X和都是 3x3 方阵,我需要的是一个将返回 的函数Y,其中是矩阵乘法。Znp.array([A*X, B*Y, C*Z])*
对于数组,默认情况下运算符是“逐元素”的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。
| 归档时间: |
|
| 查看次数: |
11878 次 |
| 最近记录: |