我如何做一个模仿'keepdims'的einsum?

Cal*_*xc1 3 python numpy numpy-einsum

一个python问题:我有一个np.einsum操作,我正在一对3d数组上做:

return np.einsum('ijk, ijk -> ik', input_array, self._beta_array)
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是结果是2d; 该操作折叠'j'维度.我喜欢做的是让它保留'j'维度,类似于'keepdims'在np.sum函数中的工作方式.

我可以将结果包装在np.expand_dims中,但这对我来说似乎效率低下.我宁愿找到一些方法来调整einsum来输出我想要的东西.

这是真的吗?

Eri*_*ric 5

我可以将结果包装好np.expand_dims,但这对我来说似乎效率低下

在numpy中添加维度是最坏的O(ndim),所以基本上是免费的.至关重要的是,实际数据没有被触及 - 所有发生的事情都是元组.strides和.shape元组各得到一个额外的元素

现在没办法用einsum直接得到你想要的东西.

ijk, ijk -> i1k如果您真的认为它提高了可读性,您可以尝试对numpy提出拉取请求来支持类似的东西