填充1D numpy数组的最快方法

时间:2011-12-02 11:10:25

标签: python numpy

我见过类似的问题,但没有直接解决这个问题。 我有以下两种方法来填充数组,使用np.zeros()的一半时间更快,一半的时间直接更快。 有更好的方法吗?我很擅长使用numpy数组,并且已经参与了加速我的代码的目的,而不是过多地考虑可读性。

import numpy as np
import time

lis = range(100000)

timer = time.time()
list1 = np.array(lis)
print 'normal array creation', time.time() - timer, 'seconds'

timer = time.time()
list2 = np.zeros(len(lis))
list2.fill(lis)
print 'zero, fill - array creation', time.time() - timer, 'seconds'

谢谢

4 个答案:

答案 0 :(得分:5)

如果您有一个浮点数列表a=[x/10. for x in range(100000)],那么您可以创建一个数组:

np.array(a) # 9.92ms
np.fromiter(a, dtype=np.float) # 5.19ms

你的方法

list2 = np.zeros(len(lis))
list2.fill(lis)

无法按预期工作。 .fill用一个值填充整个数组。

答案 1 :(得分:2)

如果给定元素数量,

np.fromiter将预先分配输出数组:

a = [x/10. for x in range(100000)] # 10.3ms
np.fromiter(a, dtype=np.float) # 3.33ms
np.fromiter(a, dtype=np.float, count=100000) # 3.03ms

答案 2 :(得分:1)

您的list2示例根本不起作用 - 如果您检查list2,您会发现它仍包含全零。我发现追求可读性不仅仅是一个好的目标。它还会增加正确代码的可能性。

答案 3 :(得分:1)

使用arange numpy函数可以更快地创建第一个列表:

list3 = np.arange(100000)

您还可以找到有用的linspace功能。