我有一些代码使用以下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的本地速度更快,或者这是它将要达到的最快速度
在这种情况下,您可以使用optimize关键字,自己实现,或者使用tensordot。但是,第一个版本实际上应该做同样的事情(重塑->;点->;重塑)
您的实施
使用optimize=“optimal”
重塑和BLAS呼叫
这通常会导致与
optimize="optimal"
相当的性能,在这种情况下,不必要的阵列拷贝可能会导致性能下降Tensordot
相关问题 更多 >
编程相关推荐