python - 如何在处理过程中删除 "simulate"numpy.delete

标签 python arrays optimization numpy

为了加快我的包含数万个元素的 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/

相关文章:

c++ - 生成排列的时间优化(竞争性编程)

python - 独立的 Django 设置

c++ - 数组值在 C++ 中错误地出现

java - 以板格式将 2D 数组打印到控制台

c++ - 使用 C++ 在 NxN 数组中查找 M 个最大元素的优化方法

javascript - 如何优化窗口调整大小和初始化时的图像自动调整

python - 如何修复 Selenium WebDriverException : The browser appears to have exited before we could connect?

python - 使用 Scrapy 获取具有相同类名的多个元素的列表

python - 是否有内置函数可以在 python 中将数字保持在一定范围内?

arrays - 在 Julia 中仅用另一个数组的值替换数组中的零