这可能在反思中很明显,但现在我不清楚。将矩阵产品沿着最后两个维度取出的单一操作
对于一对由分别a
和b
表示形状(K, N, M)
和(K, M, N)
的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)
。
编辑:充实了代码,让那些无法理解问题的人有点为难
我不完全清楚你想要达到什么目的,但是你不是在寻找'a.dot(b)'吗? – Wolph 2014-09-29 18:36:10
不,如上所述,'a.dot(b)'返回形状为'(K,N,K,N)'的数组,即每对第一个轴的点积。我想要达到的是代码。这不清楚吗? – 2014-09-29 18:40:12
我只有时间快速浏览一下,没有测试的情况下(和我提出的解决方案)之间的差异对我而言并不清楚。但它看起来像farenorth已经有一个很好的解决方案:) – Wolph 2014-09-29 19:50:36