是否有可能在没有循环的情况下计算多个点积?假设您有以下内容:
a = randn(100, 3, 3)
b = randn(100, 3, 3)
我希望获得一个形状为 (100, 3, 3) 的数组
z
,以便对于所有的 i
z[i, ...] == dot(a[i, ...], b[i, ...])
换句话说,这意味着要进行验证:
for va, vb, vz in izip(a, b, z):
assert (vq == dot(va, vb)).all()
直接的解决方案是:
z = array([dot(va, vb) for va, vb in zip(a, b)])
这里使用了隐式循环(列表推导式+数组)来计算。
是否有更高效的方法来计算z?
a @ b
(除非自PEP 465以来有所改变)。不幸的是,dot
不起作用。我不知道为什么。 - user2357112