为什么同一个循环算法的性能不同

时间:2018-08-15 09:39:03

标签: python performance loops np

现在我正在从cs 231 n开始分配,我想计算点之间的欧几里得距离:

dists[i, j]=0
for k in range(3072):
    dists[i, j]+=math.pow((X[i,k] - self.X_train[j,k]),2)
dists[i, j] = math.sqrt(dists[i,j])

但是,此代码非常慢。然后我尝试了

 dists[i,j] = dist = np.linalg.norm(X[i,:] - self.X_train[j,:])

,速度更快。问题是为什么? np.linalg.norm还会遍历所有点的所有坐标,相减,赋能,求和并平方吗?有人可以给我一个详细的答案:是因为np.linalg.norm如何访问元素还是有其他原因?

1 个答案:

答案 0 :(得分:1)

NumPy可以一口气用优化的,加速的(例如SSE,AVX,您拥有什么)C代码完成整个计算。

原始代码在Python中完成了所有工作(除了math函数,这些函数是用C语言实现的,而且还需要花费一些时间往返Python对象),就是这样慢一点。