
这些是我在较慢的机器上的时间
In [1034]: timeit [i for i in np.arange(10000000)]1 loop, best of 3: 2.16 s per loop
如果我直接生成范围(Py3,这是一个生成器),则时间要好得多。以此为基础的列表理解此大小。
In [1035]: timeit [i for i in range(10000000)]1 loop, best of 3: 1.26 s per loop
tolist首先将范围转换为列表;需要更长的时间,但迭代仍在列表中
In [1036]: timeit [i for i in np.arange(10000000).tolist()]1 loop, best of 3: 1.6 s per loop
使用
list()-与直接迭代数组相同的时间;这表明直接迭代首先要做到这一点。
In [1037]: timeit [i for i in list(np.arange(10000000))]1 loop, best of 3: 2.18 s per loopIn [1038]: timeit np.arange(10000000).tolist()1 loop, best of 3: 927 ms per loop
同时在.tolist上进行迭代
In [1039]: timeit list(np.arange(10000000))1 loop, best of 3: 1.55 s per loop
通常,如果必须循环,则处理列表的速度更快。访问列表元素更简单。
查看通过索引返回的元素。
a[0]是另一个
numpy对象;它是根据中的值构造的
a,而不仅仅是获取的值
list(a)[0]是同一类型;列表只是
[a[0], a[1], a[2]]]
In [1043]: a = np.arange(3)In [1044]: type(a[0])Out[1044]: numpy.int32In [1045]: ll=list(a)In [1046]: type(ll[0])Out[1046]: numpy.int32
但
tolist会将数组转换为纯列表(在这种情况下为int列表)。它比做更多的工作
list(),但是在编译后的代码中做。
In [1047]: ll=a.tolist()In [1048]: type(ll[0])Out[1048]: int
通常不要使用
list(anarray)。它很少做任何有用的事情,并且功能不如
tolist()。
遍历数组的最快方法是什么-无。至少不是在Python中;在C代码中有快速的方法。
a.tolist()是从数组创建列表整数的最快矢量化方法。它会迭代,但是会在已编译的代码中进行迭代。
但是您的真正目标是什么?
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)