gpt4 book ai didi

python - 左循环 numpy 数组的最快方法(如弹出、推送队列)

转载 作者:太空狗 更新时间:2023-10-29 20:57:56 27 4
gpt4 key购买 nike

对于 numpy 数组,我想执行这个操作:

  • x[1],...,x[n-1] 移动到 x[0],...,x[n-2] (左移),
  • 在最后一个索引中写入一个新值:x[n-1] = newvalue

这类似于用于先进后出队列的pop()push(newvalue)(仅反转)。

一个简单的实现是:x[:-1] = x[1:]; x[-1] = 新值

另一种使用 np.concatenate 的实现速度较慢:np.concatenate((x[1:], np.array(newvalue).reshape(1,)), axis =0)

有最快的方法吗?

最佳答案

经过一些实验,很明显:

  • 需要复制,
  • 对于 nparray(numpy 数组)来说,最快和最简单的方法是切片和复制。

所以解决方案是:x[:-1] = x[1:]; x[-1] = 新值

这是一个小基准:

>>> x = np.random.randint(0, 1e6, 10**8); newvalue = -100
>>> %timeit x[:-1] = x[1:]; x[-1] = newvalue
1000 loops, best of 3: 73.6 ms per loop
>>> %timeit np.concatenate((x[1:], np.array(newvalue).reshape(1,)), axis=0)
1 loop, best of 3: 339 ms per loop

但是如果您不需要快速访问数组中的所有值,而只需要访问第一个或最后一个值,则使用 deque更聪明。

关于python - 左循环 numpy 数组的最快方法(如弹出、推送队列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42771110/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com