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

列表理解,映射和numpy.vectorize性能

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

列表理解,映射和numpy.vectorize性能

第一条评论:不要在

xrange(
range()
样本中混合使用…这样做会使您在比较苹果和橙子时的问题无效。

我第二个@Gabe的想法是,如果您有许多大型数据结构,则numpy应该在总体上胜出……只是要记住,大多数时候C的速度要比Python快,但是大多数时候PyPy的速度要比CPython快。

:-)

就listcomps与

map()
调用而言…一个调用101个函数,而另一个调用102个。这意味着您不会看到时间上的显着差异,如下所示,使用@Mike建议的 timeit
模块:

  • 清单理解

$ python -m timeit "def foo(x):pass; [foo(i) for i in range(100)]"

1000000 loops, best of 3: 0.216 usec per loop

$ python -m timeit "def foo(x):pass; [foo(i) for i in range(100)]"

1000000 loops, best of 3: 0.21 usec per loop

$ python -m timeit "def foo(x):pass; [foo(i) for i in range(100)]"

1000000 loops, best of 3: 0.212 usec per loop

  • map()
    函数调用

$ python -m timeit "def foo(x):pass; map(foo, range(100))"

1000000 loops, best of 3: 0.216 usec per loop

$ python -m timeit "def foo(x):pass; map(foo, range(100))"

1000000 loops, best of 3: 0.214 usec per loop

$ python -m timeit "def foo(x):pass; map(foo, range(100))"

1000000 loops, best of 3: 0.215 usec per loop

尽管如此,除非您打算 使用
通过这两种技术创建的列表,否则请完全避免使用它们(使用列表)。IOW,如果您要做的只是遍历它们,那么当您只关心一次查看每个元素时,只要立即丢弃该列表,就不值得消耗内存(并可能在内存中创建潜在的庞大列表)。你完成了。

在这种情况下,我强烈建议您使用 生成器表达式,
因为它们不会在内存中创建整个列表…这是一种更友好的内存,懒惰的迭代方式,可以循环遍历元素以处理不创建大型函数内存中的数组。最好的部分是它的语法与listcomps的语法几乎相同:

a = (foo(i) for i in range(100))

仅限2.x用户
:沿着更多的迭代路线,将任何旧版2.x代码的所有

range()
调用都更改为
xrange()
,然后
range()
在移植到Python
3
xrange()
替换并重命名为时切换到
range()



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

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

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