为了加快我的算法,该算法具有数万个元素的numpy数组,我想知道我是否可以减少numpy.delete()
使用的时间。
事实上,如果我可以消除它?
我有一个算法,我有我的数组alpha
。
这就是我目前正在做的事情:
alpha = np.delete(alpha, 0)
beta = sum(alpha)
但为什么我需要删除第一个元素?是否可以使用除第一个之外的所有元素简单地总结整个数组?这会减少删除操作中使用的时间吗?
答案 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]