如果使用双 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() 是 运行,例如当您提供自己的度量函数时。

在典型情况下,当您以字符串形式提供指标时:euclideanchebyshevcityblock 等,将使用 C 优化函数。 这些指标的 C 优化函数的“句柄”在同一文件中 listed here