首页 > 解决方案 > 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

没有意义,列表似乎更快

标签: pythonperformancenumpynumpy-ndarray

解决方案


在你的代码中引入 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 并忽略导入库的时间。


推荐阅读