【发布时间】:2019-12-15 13:17:48
【问题描述】:
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 中,外积因此是一个形状为 (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, :]
【问题讨论】:
标签: python-3.x numpy tensor