如何在处理过程中“模拟”numpy.delete

时间:2014-09-03 19:02:09

标签: python arrays optimization numpy

为了加快我的算法,该算法具有数万个元素的numpy数组,我想知道我是否可以减少numpy.delete()使用的时间。

事实上,如果我可以消除它? 我有一个算法,我有我的数组alpha。 这就是我目前正在做的事情:

alpha = np.delete(alpha, 0)
beta = sum(alpha)

但为什么我需要删除第一个元素?是否可以使用除第一个之外的所有元素简单地总结整个数组?这会减少删除操作中使用的时间吗?

1 个答案:

答案 0 :(得分:3)

尽可能避免使用np.delete。它returns a a new array,这意味着必须分配新内存,并且(几乎)必须将所有原始数据复制到新数组中。这很慢,所以尽可能避免使用它。

beta = alpha[1:].sum()

应该快得多。

另请注意sum(alpha)正在调用Python builtin function sum。这不是NumPy数组中项目总和的最快方法。

alpha[1:].sum()调用NumPy array method sum,速度更快。


请注意,如果您在循环中调用alpha.delete,则代码可能会删除的不仅仅是原始alpha中的第一个元素。在这种情况下,正如Sven Marnach所指出的那样,计算所有部分和会更有效:

np.cumsum(alpha[:0:-1])[::-1]