python - numpy 数组比列表快吗?
问题描述
我是使用 python 和 numpy 数组的新手。当我在网上浏览笔记时,看到了关于 ndarray 如何比列表快的提法。
“与列表不同,NumPy 数组存储在内存中的一个连续位置,因此进程可以非常有效地访问和操作它们。”
所以我尝试在一张地图上使用 timeit,其中 sqr 以列表中的每个元素为根
from timeit import timeit
timeit(stmt='import math;a_list = list(range(1,100000));list(map(math.sqrt,a_list))',number=1000)
8.955352897006378
和 timeit 在 map 上 sqr 将每个元素放在numpy中
timeit(stmt='import numpy as np;import math;np_array=np.array(range(1,100000));list(map(math.sqrt,np_array))',number=1000)
24.691162549999717
没有意义,列表似乎更快
解决方案
在你的代码中引入 numpy 意味着引入另一种对问题的思考。
numpy 通常在创建阶段更昂贵,但对于矢量计算来说非常快。
我认为这或多或少是您正在寻找的
timeit(stmt='list(map(math.sqrt,a_list))', setup='import math; a_list = list(range(1,100000))',number=1000)
#8.64
与:
timeit(stmt='numpy.sqrt(a_list)', setup='import numpy; a_list = numpy.arange(100000)',number=1000)
#0.4
这些是timeit的结果,只应用于计算部分。我的意思是,计算 sqrt 并忽略导入库的时间。
推荐阅读
- android - Flutter AppCenter Gradle Plugin 4.0.0+ 构建问题
- java - Spring Boot 项目(GET-endpoints)中接口 URL 的正确位置?
- sql - 从一个表中获取一个字段并查看另一个表中是否存在包含该字段的条目的脚本
- opengl - 只更新片段着色器中的统一值而不重绘所有内容 - 可能吗?
- azure - 如何从 Azure 容器注册表(站点到站点连接)中提取 Ubuntu 服务器中的 docker 映像?
- terminal - 使用 find 排除所有子目录
- python - 使用 python 用 solr 中的动态值更新字段值
- joomla3.0 - 如何将数字更改为 idcardnumber 46051480Y --> 通过 XXXXXXX480y --> 使用 calc 元素
- jira-rest-api - JIRA 身份验证 API - Python
- android - Flutter Local Notification 仅在 Android 上显示点