Python中文
首页
教程
问答
标签
搜索
登录
注册
与通过循环调用函数相比,map或list理解实现的性能提升来自何处?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我知道在map的实现中使用内存比在循环中实现内存更有效。但是,我发现使用map函数而不是调用循环上迭代的函数也可以提高速度。在</p> <p>这是不是源于存储内存的优化?我所说的一个例子是内存的放置方式是连续的。我还可以看出,如果操作是并行运行的,那么速度也会提高,但我不认为是这样。欢迎从任何语言/包中的任何已知的映射实现优化示例!在</p> <p>——编辑:我觉得以前的例子并不能很好地说明我的问题。在</p> <p>比较起来可能并不完全公平。 例如,我测试a循环实现、列表理解和map函数。你知道怎样才能使一个比另一个快吗?不一定是PYTHON;这更多的是关于如何实现更有效的算法来将函数应用于iterable对象的问题。一个有效的答案可能是“通常对于每一种map/list理解风格的代码,您将能够更快地实现一个循环”。或者在某些情况下,列表理解更快,但这与实现细节有关,这正是我感兴趣的。在</p> <pre><code>import time import numpy as np def square2(x): return x*x def main(): foobar = np.linspace(1, 300, 300) start_time = time.time() res = [0] * len(foobar) for i, foo in enumerate(foobar): res[i] = square2(foo) print("{} {} runtime seconds {}".format("-"*8, time.time()-start_time, "-"*8)) res = [0] * len(foobar) start_time = time.time() res = [square2(foo) for foo in foobar] print("{} {} runtime seconds {}".format("-"*8, time.time()-start_time, "-"*8)) start_time = time.time() res = list(map(square2, foobar)) print("{} {} runtime seconds {}".format("-"*8, time.time()-start_time, "-"*8)) </code></pre> <p>输出为:</p> ^{pr2}$
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>差异是由于追加,而不是映射。试试这个:</p> <pre><code>res = [] res = [square2(foo) for foo in foobar] </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
无法使用Django/mongoengine连接到MongoDB(身份验证失败)
1 回答
无法使用Django\u mssql\u后端迁移到外部hos
7 回答
无法使用Django&Python3.4连接到MySql
1 回答
无法使用Django+nginx上载媒体文件
1 回答
无法使用Django1.6导入名称模式
9 回答
无法使用Django1.7和mongodb登录管理站点
5 回答
无法使用Djangoadmin创建项目,进程使用了错误的路径,因为我事先安装了错误的Python
7 回答
无法使用Djangockedi验证CBV中的字段
9 回答
无法使用Djangocketditor上载图像(错误400)
6 回答
无法使用Djangocron进行函数调用
10 回答
无法使用Djangofiler djang上载文件
8 回答
无法使用Djangokronos
5 回答
无法使用Djangomssql provid
7 回答
无法使用Djangomssql连接到带有Django 1.11的MS SQL Server 2016
7 回答
无法使用Djangomssq迁移Django数据库
10 回答
无法使用Djangonox创建用户
1 回答
无法使用Djangopyodb从Django查询SQL Server
7 回答
无法使用Djangopython3ldap连接到ldap
5 回答
无法使用Djangoredis连接到redis
8 回答
无法使用Django中的FK创建新表
2 回答