在Python中,理论上,哪种方法应该更快test1和test2(假设相同的值x).我试过用%timeit但看到的差别很小.
import numpy as np
class Tester():
def __init__(self):
self.x = np.arange(100000)
def test1(self):
return np.sum(self.x * self.x )
def test2(self,x):
return np.sum(x*x)
Run Code Online (Sandbox Code Playgroud)
在Python的任何实现中,时间将由两个向量的乘法压倒性地占主导地位,每个向量具有100,000个元素.与此相比,其他一切都是噪音.如果你真的对测量其他开销很感兴趣,那么使矢量小得多.
在CPython中,test2()很可能会更快一些.它有一个"额外"参数,但是参数是以"C速度"解压缩的,所以这并不重要.通过LOAD_FAST操作码访问参数的方式与局部变量相同,操作码是一种简单的array[index]访问方式.
在test1()每个实例中,self.x都会在字典中查找字符串"x" self.__dict__.这比索引数组访问慢.但与冗长的乘法所花费的时间相比,它基本上没什么.