是否可以加快将列表转换为python数组的速度?

时间:2019-04-08 08:46:08

标签: python arrays python-2.7 list

在我的代码中,我注意到将列表转换为数组需要花费大量时间。

我想知道是否有更快的方法可以将列表转换为python中的数组,这是我的三种尝试:

import numpy as np
from timeit import  timeit
from array import array


added_data = range(100000)

def test1():
    np.asarray(added_data, dtype=np.float16)

def test2():
    np.array(added_data, dtype=np.float16)

def test3():
    array('f', added_data)

print(timeit(test1,number=100))
print(timeit(test2,number=100))
print(timeit(test3,number=100))

换句话说:

输入

输出

3 个答案:

答案 0 :(得分:1)

与您已经尝试过的简单明了的方法相比,没有一种更快的方法可以将值列表转换为数组。如果有更好的方法,那么numpy的作者可能会在np.asarraynp.array构造函数本身中实现它。我还想指出,array.array创建的对象要比numpy函数复杂得多,所以它可能不是您想要的。

您可能能够提高程序整体性能的方法是避免首先创建列表。也许您可以使用np.loadtxtnp.load(取决于其格式)将文件中的外部数据直接读取到数组中。或者,也许您可​​以使用np.arange之类的函数从头开始生成数组,而不是使用range之类的普通Python函数(在Python 2中)返回列表。

答案 1 :(得分:0)

结果将相同:

from array import array
def test4() :
    array = array('d')
    for item in added_data: # comma, or other
        array.append(item)

但是您可以尝试:

from array import array
def test5() :
    dataset_array = array('d')
    dataset_array.extend(added_data)

答案 2 :(得分:0)

将项目添加到numpy数组将导致性能问题。永远不要那样做。

替代品: 1-将项目添加到列表中,然后将该列表转换为numpy数组。

2-使用集合中的双端队列。这是最好的方法。

import collections
a = collections.deque([1,2,3,4])
a.append(5)