python 快速遍历数组_遍历numpy数组最快的方法是什么

这是我在慢一点的机器上的计时In [1034]: timeit [i for i in np.arange(10000000)]

1 loop, best of 3: 2.16 s per loop

如果我直接生成范围(Py3,所以这是一个generator),那么时间会好得多。把这个作为了解这个大小的列表的基线。In [1035]: timeit [i for i in range(10000000)]

1 loop, best of 3: 1.26 s per loop

tolist首先将arange转换为列表;需要更长的时间,但迭代仍在列表中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 loop

In [1038]: timeit np.arange(10000000).tolist()

1 loop, best of 3: 927 ms per loop

同时迭代.tolistIn [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.int32

In [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()是从数组中创建列表整数的最快矢量化方法。它迭代,但在编译的代码中这样做。

但你真正的目标是什么?

你可能感兴趣的:(python,快速遍历数组)