numpy 数组比列表快吗?
Are numpy arrays faster than lists?
我刚开始使用 python 和 numpy arrays.While 我在网上浏览笔记,看到有人提到 ndarray 比列表更快..
"NumPy arrays are stored at one continuous place in memory unlike
lists, so processes can access and manipulate them very efficiently."
所以我尝试在地图上使用 timeit,其中 sqr 将 list
中的每个元素作为根
from timeit import timeit
timeit(stmt='import math;a_list = list(range(1,100000));list(map(math.sqrt,a_list))',number=1000)
8.955352897006378
and timeit on a map which sqr roots each element in a 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 并忽略导入库的时间。
我刚开始使用 python 和 numpy arrays.While 我在网上浏览笔记,看到有人提到 ndarray 比列表更快..
"NumPy arrays are stored at one continuous place in memory unlike lists, so processes can access and manipulate them very efficiently."
所以我尝试在地图上使用 timeit,其中 sqr 将 list
中的每个元素作为根from timeit import timeit
timeit(stmt='import math;a_list = list(range(1,100000));list(map(math.sqrt,a_list))',number=1000)
8.955352897006378
and timeit on a map which sqr roots each element in a 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 并忽略导入库的时间。