首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么scipy.distance.cdist在使用float32 (速度较慢)和float64 (速度较快)之间有很大的性能差异?

为什么scipy.distance.cdist在使用float32 (速度较慢)和float64 (速度较快)之间有很大的性能差异?
EN

Stack Overflow用户
提问于 2018-06-04 00:40:52
回答 1查看 850关注 0票数 4

为什么scipy.distance.cdist在使用float32和使用float64之间有很大的性能差异?

代码语言:javascript
运行
复制
from scipy.spatial import distance
import numpy as np
import time

a_float32 = np.empty((1000000, 512), dtype=np.float32)
b_float32 = np.empty((1, 512), dtype=np.float32)
a_float64 = np.empty((1000000, 512), dtype=np.float64)
b_float64 = np.empty((1, 512), dtype=np.float64)

t1 = time.time()
for i in range(100):
    distance.cdist(a_float32, b_float32, "sqeuclidean")
t2 = time.time()
print(t2-t1)
t1 = time.time()
for i in range(100):
    distance.cdist(a_float64, b_float64, 'sqeuclidean')
t2 = time.time()
print(t2-t1)

在我的电脑上,这段代码为float32生成了130.6998474597931的时间,为float64生成了22.450339794158936的时间,相差了6倍之多。 float64比float32快这么大的区别的原因是什么?

然而,如果b不是np.empty((1512)),而是np.empty((k,512)),并且k (>1)变得越来越大,那么差距似乎变得越来越小。例如,当为k=5时,我为float32获得222.25975680351257,为float64 (2x)获得110.36117148399353。当k变大时,间隙为什么变小?

EN

回答 1

Stack Overflow用户

发布于 2018-06-04 07:00:00

实际执行计算的底层C代码是使用C double变量实现的,这些变量是64位浮点值。当您传入np.float32数组时,必须复制数据。

对于问题的第二部分:更大的k意味着更多的工作,因此复制数据的开销只占总时间的一小部分。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50668651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档