比较这两个短代码的计算速度

JW *_*W O 2 python algorithm performance numpy

在代码的两个版本中,v1和v2都是大向量(长度范围从1,000 1,000,000到len(v1)= len(v2)).我希望代码2代码1更强大,但事实证明代码1更快,我不知道为什么.你能解释为什么代码2很慢吗?谢谢.

代码1:

norm1=math.sqrt(np.dot(v1,v1))
norm2=math.sqrt(np.dot(v2,v2))
kern=np.dot(v1,v2)/(norm1*norm2)
Run Code Online (Sandbox Code Playgroud)

代码2:

kern=0
for i in range(0, len(v1)):
    kern+=min(v1[i], v2[i])
Run Code Online (Sandbox Code Playgroud)

Den*_*ers 5

np.dot()呼叫也需要通过矢量回路,但这些环被实现为(典型地)本机/ C++中.与基于C++的循环相比,在python中显式实现的循环(如代码2中所示)非常慢.