单一操作,仅沿最后两个维度获取矩阵产品

时间:2014-09-29 18:23:14

标签: python arrays numpy multidimensional-array

这可能在反思中很明显,但我现在还不清楚。

对于分别由(K, N, M)(K, M, N)表示的一对形状ab的numpy数组,有没有办法将以下内容计算为单个矢量化操作:

import numpy as np
K = 5
N = 2
M = 3
a = np.random.randn(K, N, M)
b = np.random.randn(K, M, N)

output = np.empty((K, N, N))
for each_a, each_b, each_out in zip(a, b, output):
    each_out[:] = each_a.dot(each_b)

一个简单的a.dot(b)返回第一个轴的每一对的点积(因此它返回一个形状为(K, N, K, N)的数组。

编辑:为那些无法理解问题的人充实了一些代码。

1 个答案:

答案 0 :(得分:3)

我回答了一个类似的问题:Element-wise matrix multiplication in NumPy

我认为您正在寻找的是:

output = np.einsum('ijk,ikl->ijl', a, b)
祝你好运!