如果我定义:def get_list_of_numbers():
n = np.random.randint(0,10)
return list(range(n))
def foo(K):
x=[]
for i in range(K):
y = get_list_of_numbers()
x.extend(y)
return x
简单地调用get_list_of_numbers花费的时间最多。将结果转换为数组并不需要太多时间:
^{pr2}$
让我们尝试一下预分配方法:def foo1(K):
x = np.zeros(K*10,int)
cnt = 0
for i in range(K):
y = get_list_of_numbers()
n = len(y)
x[cnt:cnt+n] = y
cnt += n
x = x[:cnt]
return x
In [80]: timeit foo1(1000)
100 loops, best of 3: 10.1 ms per loop
数组串联方法In [48]: def foo1(K):
...: x = np.zeros(0,int)
...: for i in range(K):
...: y = get_list_of_numbers()
...: x = np.concatenate((x, y), axis=0)
...: return x
In [51]: timeit foo1(1000).shape
100 loops, best of 3: 15.9 ms per loop