python - 如果 Scipy.spatial.distance.cdist 使用双 for 循环,为什么它会很快?
问题描述
我被告知双 for 循环在 Python 中很慢。然而,在深入研究Scipy.spatial.distance.cdist()的实现时,我发现它只是一个双循环而不是一些聪明的 numpy 技巧。然而,许多答案(例如https://stackoverflow.com/a/62416370)建议使用cdist()
.
我的问题是:如果函数只是天真地迭代 O(n^2) 中的所有元素,为什么它仍然如此之快?
解决方案
_cdist_callable()
在大多数情况下,不使用您指向的具有两个 for 循环的函数。当您阅读cdist()
函数时,您可以看到它_cdist_callable()
正在运行,例如当您提供自己的度量函数时。
在典型情况下,当您以字符串的形式提供指标时:、、、euclidean
等chebyshev
,cityblock
将使用 C 优化函数。这些指标的 C 优化函数的“句柄”列在此处,在同一个文件中。
推荐阅读
- macos - 在 Applescript 中使用 sed 时,Sed“无效的命令代码 <”
- ruby - 使用 prometheus client_ruby 客户端报告队列大小
- html - 无法让 CSS 动画在 Shopify 中工作
- python - 有没有办法配置 UML 图在 PyCharm 中呈现方法(按名称)的方式?
- prestashop - Prestashop 1.7:如何将 CMS 页面设置为主页
- sql - plsql引号中的Oracle计划作业错误
- c# - Owin Oauth 偶尔会在负载平衡环境中重定向过多
- c# - ASP.NET MVC 通过 ActionLink 生成具有不同文化参数的 url
- php - 使用数据表时如何在单个单元格中显示多个按钮?
- android - RxJava 和网络调用给出“打开文件过多错误”