1

我被告知双 for 循环在 Python 中很慢。然而,在深入研究Scipy.spatial.distance.cdist()的实现时,我发现它只是一个双循环而不是一些聪明的 numpy 技巧。然而,许多答案(例如https://stackoverflow.com/a/62416370)建议使用cdist().

我的问题是:如果函数只是天真地迭代 O(n^2) 中的所有元素,为什么它仍然如此之快?

4

1 回答 1

1

_cdist_callable()在大多数情况下,不使用您指向的具有两个 for 循环的函数。当您阅读cdist()函数时,您可以看到它_cdist_callable()正在运行,例如当您提供自己的度量函数时。

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

于 2021-10-11T21:02:46.757 回答