python - 跨多个轴的点积

标签 python arrays numpy dot-product

给定两个 numpy 数组,其中前 d 维度大小相等

import numpy

d = 3
a = numpy.random.rand(2, 2, 2, 12, 3)
b = numpy.random.rand(2, 2, 2, 5)

我想计算这些第一个维度的点积。这个

a2 = a.reshape(-1, *a.shape[d:])
b2 = b.reshape(-1, *b.shape[d:])
out = numpy.dot(numpy.moveaxis(a2, 0, -1), numpy.moveaxis(b2, 0, -2))

有效,但前提是b的形状不是(2, 2, 2)。搞乱 reshapemoveaxis 似乎也比必要的更复杂。

还有更优雅的解决方案吗? (也许与tensordot?)

最佳答案

再次使用np.einsum

np.einsum('ijklm,ijkn->lmn',a,b)

关于python - 跨多个轴的点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45372098/

相关文章:

python - 仅获取不包含字段查询集的值

javascript - 使用 JavaScript 从数组中的字符串中删除所有字母字符和前导零

c - 如何从C中的字符串变量给出数组名称

c - 将两个结构体数组作为参数传递给函数

python - 创建一个具有预先确定的均值和标准差的数组

python - 将数组转换为百分位数

python - 将 Python 字节转换为字符串而不进行编码

python - matplotlib imshow 为每种颜色添加标签并将它们放入图例中

python - 在 .docx 文件中查找和替换文本 - Python

python - 如何找到列表中不一定相邻的最大连续数字集?