为什么相同的循环算法性能不同
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 对象),它只是,好吧, 更慢。
现在我正在做 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 对象),它只是,好吧, 更慢。