如何在恒定时间内将新项目插入到numpy数组中。
python列表有一个append
方法来执行此操作,numpy中的等价物。看起来numpy.append
返回数组的副本并占用线性时间。
答案 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.resize
与np.resize(a, ...)
不同。
如果可以在不移动阵列的情况下调整阵列大小,则此操作很快。因为可以通过调整大小来移动数组,所以在调整大小后对数组的引用(例如,在调整大小之前执行b = a
)是不安全的。我通常设置refcheck=False
但我确保在调整大小之前不要使用任何可能引用a
的数组。