为了加快我的包含数万个元素的 numpy 数组的算法,我想知道是否可以减少 numpy.delete()
使用的时间。
事实上,如果我可以消除它呢?
我有一个算法,其中有我的数组alpha
。
这就是我目前正在做的事情:
alpha = np.delete(alpha, 0)
beta = sum(alpha)
但是为什么我需要删除第一个元素呢?是否可以使用除第一个元素之外的所有元素简单地对整个数组求和?这会减少删除操作所用的时间吗?
最佳答案
尽可能避免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]
关于python - 如何在处理过程中删除 "simulate"numpy.delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25651814/