在numba-scipy中应从何处导入linkage函数?
如何为numba-scipy正确导入linkage函数?
你当前的代码尝试替换scipy.cluster.hierarchy.linkage为numba-scipy版本,但导入路径有误。numba-scipy的工作逻辑是通过**猴子补丁(monkey-patching)**自动加速现有scipy函数,不需要直接从numba-scipy包中导入目标函数。
原始代码(存在导入疑问)
import numpy as np import pandas as pd from scipy.cluster.hierarchy import dendrogram, linkage, cut_tree >>> "WHAT TO PUT HERE" from numba_scipy.special.overloads import linkage "?" X = [[1.0,2.0,3.0,4.0,5.0], [1.0,3.0,4.0,5.0,6.0], [1.0,2.0,5.0,6.0,7.0], [2.0,3.0,5.0,4.0,3.0]] Xdf = pd.DataFrame(data=X).transpose() Zf = linkage(Xdf.transpose(), 'single', 'correlation')
正确的修改方式
只需要在导入scipy相关函数之前导入numba_scipy,它会自动替换scipy中支持的函数为加速版本,无需修改原有的linkage调用代码:
# 先导入numba_scipy,触发猴子补丁 import numba_scipy import numpy as np import pandas as pd # 正常导入scipy的函数,此时linkage已经被numba加速 from scipy.cluster.hierarchy import dendrogram, linkage, cut_tree X = [[1.0,2.0,3.0,4.0,5.0], [1.0,3.0,4.0,5.0,6.0], [1.0,2.0,5.0,6.0,7.0], [2.0,3.0,5.0,4.0,3.0]] Xdf = pd.DataFrame(data=X).transpose() # 调用的已经是numba加速后的linkage Zf = linkage(Xdf.transpose(), 'single', 'correlation')
注意事项
- 确保已安装依赖:
pip install numba numba-scipy scipy pandas numpy - numba-scipy对scipy函数的支持并非完全覆盖,若使用的
linkage方法(如这里的single+correlation)未被支持,会自动 fallback 到原始scipy实现 - 不需要手动从
numba_scipy.special.overloads导入函数,这是内部模块,不对外暴露
内容的提问来源于stack exchange,提问作者ManInMoon
相关产品推荐
相关产品推荐

