我试图做一个函数,如numpy.inner
,但总结了第一个两个数组的轴而不是最后一个轴。目前我使用tensordot
与rollaxis
:计算numpy.inner()在第一个(而不是最后一个)轴
def inner1(a, b):
return numpy.tensordot(numpy.rollaxis(a, 0, len(a.shape)), b, 1)
但我想知道:有没有更好的办法?也许一个不需要我滚动轴?
我觉得einsum
应该使这成为可能,但我不知道如何在这里使用它。
当我指定下标字符串时,似乎需要我对a
和b
进行硬编码,在此我无法真正做到,因为对输入的维度没有特别的要求。
(注:我上午知道有到求和第一轴,而不是最后的性能影响,但我在这里忽略它们)
您确定这种方式有效吗?这失败了:'einsum('i ...,i ...-> ...',((1,2)),((1,3)))' – Mehrdad 2014-10-26 23:18:19
这一切都取决于你想要什么去做。在这种情况下,我认为你想,'einsum('ij ...,ik ...-> jk ...',((1,2)),((1,3)))''。 – farenorth 2014-10-26 23:21:57
我想你可能错过了这个问题的要点?我无法控制输入形状。据我所知,他们可能是“(1,2,3,4)”和“(1,5,6,7)';重点是除了第一个维度之外的所有维度都应该是不相关的,所以当我不知道字符串应该是什么时,我将如何使用'einsum'? – Mehrdad 2014-10-26 23:23:19