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
を使用する方が賢明です。