【发布时间】:2019-08-09 07:12:29
【问题描述】:
但显然我做错了什么。
我一直在追逐一个错误,我终于解决了它。考虑:
xs = np.arange(100 * 3).reshape(100, 3)
W = np.arange(3 * 17).reshape(3, 17)
a = np.einsum('df, hg -> dg', xs, W)
b = np.dot(xs, W)
在上面a != b.
我发现的问题是在 einsum 中,我说是 df, hg -> dg,但如果我将 h 换成 f,它会按预期工作:
a = np.einsum('df, fg -> dg', xs, W)
b = np.dot(xs, W)
现在,a == b。
两种情况下的求和有何不同,我希望它们相同?
【问题讨论】:
-
附带说明,
np.einsum('df, hg -> dg', xs, W)适用于任意形状,而np.einsum('df, fg -> dg', xs, W)不适用。这应该意味着两者并不相同,因为每个张量积都可以以独特的方式解释为einsum求和。
标签: python numpy numpy-einsum