使用 numpy 数组,我想执行此操作:
x[1],...,x[n-1]
移动到 x[0],...,x[n-2]
(左移),x[n-1] = newvalue
。 这类似于先进后出队列的
pop()
、 push(newvalue)
(仅反转)。一个简单的实现是:
x[:-1] = x[1:]; x[-1] = newvalue
。另一种使用
np.concatenate
的实现速度较慢: np.concatenate((x[1:], np.array(newvalue).reshape(1,)), axis=0)
。有没有最快的方法来做到这一点?
最佳答案
经过一些实验,很明显:
nparray
(numpy 数组)是切片和复制。 所以解决方案是:
x[:-1] = x[1:]; x[-1] = newvalue
。这是一个小基准:
>>> 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/