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

How do I do an einsum that mimics 'keepdims'?

一个 python 问题:我在一对 3d 数组上进行了 np.einsum 操作:

return np.einsum('ijk, ijk -> ik', input_array, self._beta_array)

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

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

这可能吗?

I can wrap the result in np.expand_dims, but that seems inefficient to me

在 numpy 中添加一个维度最差 O(ndim),所以基本上是免费的。至关重要的是,实际数据没有被触及 - 所发生的只是 .strides.shape 元组每个

得到一个额外的元素

目前没有办法使用einsum直接得到你想要的。

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