有没有更好更快的方法来表达下面的点产品在纽比?
我有以下形状:

>>> h.shape
(600L, 400L, 3L)
>>> c.shape
(400L, 3L)

如果可能的话,我想在没有循环的情况下计算以下内容:
ans = np.empty((600, 400))
for i in range(400):
     ans[:, i] = h[:, i, :].dot(c[i, :])

我想这应该是有可能的简单重塑,但我不知道如何自动柜员机。

最佳答案

作为沃伦解决方案(我认为这是最好的)的替代方案,有一个未记录的inner1d

>>> from numpy.core.umath_tests import inner1d
>>> a = inner1d(h, c)
>>> np.allclose(a, ans)
True

从其docstring:
内部1d(x1,x2[,out])
最后一个维度上的内部和其余维度上的广播:(i),(i)—>()
对于这种特殊情况,在我的系统中,inner1dnp.einsum稍快:
In [2]: %timeit np.einsum('ijk,jk->ij', h, c)
100 loops, best of 3: 3.85 ms per loop

In [3]: %timeit inner1d(h, c)
100 loops, best of 3: 2.78 ms per loop

10-06 14:01