python-3.x - Numpy:如何执行四个向量的外积然后求和?
问题描述
A = [a1, a2]
, B = [b1, b2]
, C = [c1, c2]
, D = [d1, d2]
.
的外积A, B, C, D
只是:
[
[
[[a1*b1*c1*d1, a1*b1*c1*d2], [a1*b1*c1*d1, a1*b1*c2*d2]],
[[a1*b2*c2*d1, a1*b2*c1*d2], [a1*b2*c2*d1, a1*b2*c2*d2]]
],
[
[[a2*b1*c1*d1, a2*b1*c1*d2], [a2*b1*c2*d1, a2*b1*c2*d2]],
[[a2*b2*c1*d1, a2*b2*c1*d2], [a2*b2*c2*d1, a2*b2*c2*d2]]
]
]
在 numpy 中,外部产品因此是一个 shape 数组(2, 2, 2, 2)
。我知道该怎么做。问题是,我有 100 个这种 A、B、C、D。它们是通过固定 k 从 A_k、B_k、C_k、D_k 中取出的。所以它们实际上是形状 (2, 100) 或 (100, 2) 的数组。实际上可能是 (20, 100) 或 (100, 20)。我用2来简化写作。我想做的是:把这种外积做100次,然后总结。即:求和 100 个形状为 (2, 2, 2, 2) 的数组。如何使用 numpy 有效地做到这一点?如果更好,是否有任何 GPU 加速方法可以做到这一点?
如果 A、B、C、D 只是一维数组,我知道该怎么做。以下一行代码可以正常工作:
a[:, None, None, None] * b[None, :, None, None] * c[None, None, :, None] * d[None, None, None, :]
解决方案
numpy.einsum加上仔细选择轴的 numpy.sum 应该可以满足您的需求。
推荐阅读
- overlay - 在代码中查询/使用学习覆盖状态
- angular - ng 构建消息“无法读取未定义的属性 'toLowerCase' 中的错误”
- docusignapi - Docusign 代理必须先签署文件,然后再将其发送给客户
- swift - Xcode 11.3.1 中 SceneKit 中的粒子系统文件在哪里
- string - UTF-16 编码 - 为什么使用复杂的代理对?
- flutter - Flutter OneSignal 推送通知问题
- amazon-web-services - AWS CloudFormation:路由表未填充
- vue.js - 最新 Vue 中的自定义无线电组件在最新 Safari 中根本不起作用
- java - 冒泡排序代码中临时整数的作用是什么
- linux - 为什么 echo -n "100" | wc -c 输出 3?