如果使用双 for 循环,为什么 Scipy.spatial.distance.cdist 很快?
Why is Scipy.spatial.distance.cdist fast if it uses a double for loop?
我听说 Python 中的双 for 循环很慢。但是,在深入研究 Scipy.spatial.distance.cdist(), I found that it's just a double for loop and not some clever numpy trick. And yet, many answers (e.g. ) 的实现时,建议使用 cdist()
.
我的问题是:如果函数只是天真地遍历 O(n^2) 中的所有元素,为什么它仍然这么快?
您指向的带有两个 for 循环的函数 _cdist_callable()
在大多数情况下未被使用。当您阅读 cdist()
函数时,您可以看到 _cdist_callable()
是 运行,例如当您提供自己的度量函数时。
在典型情况下,当您以字符串形式提供指标时:euclidean
、chebyshev
、cityblock
等,将使用 C 优化函数。
这些指标的 C 优化函数的“句柄”在同一文件中 listed here。
我听说 Python 中的双 for 循环很慢。但是,在深入研究 Scipy.spatial.distance.cdist(), I found that it's just a double for loop and not some clever numpy trick. And yet, many answers (e.g. cdist()
.
我的问题是:如果函数只是天真地遍历 O(n^2) 中的所有元素,为什么它仍然这么快?
您指向的带有两个 for 循环的函数 _cdist_callable()
在大多数情况下未被使用。当您阅读 cdist()
函数时,您可以看到 _cdist_callable()
是 运行,例如当您提供自己的度量函数时。
在典型情况下,当您以字符串形式提供指标时:euclidean
、chebyshev
、cityblock
等,将使用 C 优化函数。
这些指标的 C 优化函数的“句柄”在同一文件中 listed here。