如何解决SciPy cdist速度差
我很好奇为什么以下cdist
在时间上会有如此大的差异,即使它们产生相同的结果:
import numpy as np
from scipy.spatial.distance import cdist
x = np.random.rand(10_000_000,50)
y = np.random.rand(50)
result_1 = cdist(x,y[np.newaxis,:])
result_2 = cdist(x,:],`minkowski`,p=2.)
result_1
比result_2
快得多。
解决方法
欧几里得距离source lines 50-66的C实现使用乘法和sqrt()
调用,而Minkowski距离source lines 381-391基于对{{1}的慢得多的调用}功能。
作为参考,请参阅讨论here和here,将pow()
与乘法和pow
进行比较。
因此,尽管看起来欧几里得规范只是调用Minkowski规范,source line 614,sqrt
实际上calls directly through到代码不同的C实现。实际执行中未调用python cdist
函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。