【发布时间】:2020-05-17 17:02:38
【问题描述】:
我有一些代码使用以下einsum:
y = np.einsum('wxyijk,ijkd->wxyd', x, f)
其中(例如)x 的形状是 (64, 26, 26, 3, 3, 3),f 的形状是 (3, 3, 3, 1),两者的 dtype=float
%timeit np.einsum('wxyijk,ijkd->wxyd', x, f)
# 2.01 ms ± 55.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
这对我的应用程序来说太慢了,时间紧迫。使用 GPU(通过 CuPy)和路径加速(通过 opt-einsum)似乎都没有使这更快。有什么方法可以在 NumPy 中以原生方式使其更快,或者这是否与它将获得的一样快?
【问题讨论】:
-
您可以将数组重塑为 (64,26,26,27) 和 (27,1),并使用
@。但在我的测试中,这并没有提高速度。 -
对此不确定,但 100 个循环可能不足以将字符串的初始解析分摊到一组操作中
标签: python numpy numpy-einsum