考虑这个MWE:
import numpy as np
a = np.random.uniform(0,1,size=[14,25,25])
b = np.random.uniform(0,1,size=[14,25,25])
c = np.random.uniform(0,1,size=[14,25])
def my_func(a,b,c):
InnerSum = np.einsum('lpk, lkm -> lpm', a, b)
OuterSum = np.einsum('lp, lpm -> lm', c, InnerSum )
Result = 2 * OuterSum
return Result
my_func() 是我第一次尝试进行计算,但我想加快速度。然后我尝试了以下修改后的功能:
def my_func_2(a,b,c):
OuterSum = np.einsum('lpk, lkm, lp -> lm', a, b, c)
Result = 2 * OuterSum
return Result
但是,当我%timeit
在这两个功能上运行时,我得到
%timeit my_func(a,b,c)
293 µs ± 1.37 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit my_func_2(a,b,c)
347 µs ± 1.47 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
为什么第二种方法比第一种慢?如何优化 my_func() 以使其更快?