Fastest way to left-cycle a numpy array (like pop, push for a queue)

后端 未结 1 1204
陌清茗
陌清茗 2020-12-14 22:29

With numpy arrays, I want to perform this operation:

  • move x[1],...,x[n-1] to x[0],...,x[n-2] (left shift),
  • write a new value
1条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-14 23:04

    After some experiments, it is clear that:

    • copying is required,
    • and the fastest and simplest way to do that, for nparray (numpy arrays) is a slicing and copying.

    So the solution is: x[:-1] = x[1:]; x[-1] = newvalue.

    Here is a small benchmark:

    >>> 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
    

    But if you don't need to have a fast access to all values in the array, but only the first or last ones, using a deque is smarter.

    0 讨论(0)
提交回复
热议问题