微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SciPy cdist速度差

如何解决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_1result_2快得多。

解决方法

欧几里得距离source lines 50-66的C实现使用乘法和sqrt()调用,而Minkowski距离source lines 381-391基于对{{1}的慢得多的调用}功能。

作为参考,请参阅讨论herehere,将pow()与乘法和pow进行比较。

因此,尽管看起来欧几里得规范只是调用Minkowski规范,source line 614sqrt实际上calls directly through到代码不同的C实现。实际执行中未调用python cdist函数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。