在恒定时间附加到numpy数组

时间:2013-05-24 14:17:10

标签: python numpy

如何在恒定时间内将新项目插入到numpy数组中。

python列表有一个append方法来执行此操作,numpy中的等价物。看起来numpy.append返回数组的副本并占用线性时间。

1 个答案:

答案 0 :(得分:1)

关于这个问题的评论者是对的:numpy数组与Python列表不同,因此numpy append方法通常不是一个好的选择。当尝试快速附加到numpy数组时,这可能特别棘手。 numpy数组的append方法返回数组的副本,并在末尾添加新项。 This answer有很多关于Numpy方法的建议,并正确地提到最好的方法是最初分配数组的最终大小。对于(1)我不知道最终阵列大小应该是什么以及(2)我需要更好的性能的情况,我经常使用,

a.resize(np.size(a) + 1, refcheck=False)
a[-1] = foo

其中a是一个numpy数组。小心! a.resizenp.resize(a, ...)不同。 如果可以在不移动阵列的情况下调整阵列大小,则此操作很快。因为可以通过调整大小来移动数组,所以在调整大小后对数组的引用(例如,在调整大小之前执行b = a)是不安全的。我通常设置refcheck=False但我确保在调整大小之前不要使用任何可能引用a的数组。