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

Why is the performance of the same loop algorithm differs

现在我正在做 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 如何访问元素还是有其他原因?

NumPy 可以在优化、加速(例如 SSE、AVX 等)C 代码中一次性完成整个计算。

原始代码在 Python 中完成所有工作(除了用 C 实现的 math 函数外,还需要时间来回 Python 对象),它只是,好吧, 更慢。