栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Python优化的点积

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Python优化的点积

我只是为了好玩而写了一个使用numpy的“ d4”:

from numpy import dotdef d4(v1, v2):     check(v1, v2)    return dot(v1, v2)

我的结果(Python 2.5.1,XP Pro sp3、2GHz Core2 Duo T7200):

d0 elapsed:  12.1977242918d1 elapsed:  13.885232341d2 elapsed:  13.7929552499d3 elapsed:  11.0952246724

过去了d4:56.3278584289#变得麻木了!

而且,为了获得更多乐趣,我打开了psyco:

d0 elapsed:  0.965477735299d1 elapsed:  12.5354792299d2 elapsed:  12.9748163524d3 elapsed:  9.78255448667

过去的d4:54.4599059378

基于此,我宣布d0为赢家:)


更新资料

@ kaiser.se:我可能应该提到我确实先将所有内容转换为numpy数组:

from numpy import arrayv3 = [array(vec) for vec in v1]v4 = [array(vec) for vec in v2]# thent4 = timeit.Timer("d4(v3,v4)","from dot_product import d4,v3,v4")

我包括了,

check(v1,v2)
因为它包含在其他测试中。放弃它会给numpy一个不公平的优势(尽管看起来它可以使用一个)。数组转换减少了大约一秒钟(比我想象的要少得多)。

我所有的测试均以N = 50进行。

@nikow:我使用的numpy 1.0.4无疑是旧的,自从我安装了numpy以来,它们在过去一年半的时间里肯定有提高的表现。


更新#2

@ kaiser.se哇,您完全正确。我一定一直以为这些是列表列表或其他内容(我真的不知道我在想什么……对编程为+1)。

看起来如何:

v3 = array(v1)v4 = array(v2)

新结果:

d4 elapsed:  3.22535741274

使用Psyco:

d4 elapsed:  2.09182619579

d0仍然可以通过Psyco获胜,但是numpy总体上可能更好,尤其是对于较大的数据集。

昨天,我对缓慢的numpy结果感到不安,因为numpy可能用于 大量 计算并且已经进行了很多优化。显然,尽管如此,我还是不愿意去检查我的结果:)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637551.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号