0
arr
には、arr[:]
またはarr[::]
よりもアクセスが速いのはなぜですか?'arr'よりも素早く 'arr [:]'にアクセスすると高速に表示されます
In [1]: import numpy as np
In [2]: arr = np.random.randint(0, 255, (512, 512))
In [3]: %timeit arr
30.8 ns ± 2.43 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [4]: %timeit arr[:]
204 ns ± 0.588 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [5]: %timeit arr[::]
204 ns ± 1.35 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [8]: np.all(arr == arr[:])
Out[8]: True
In [9]: np.all(arr == arr[::])
Out[9]: True
上記のアプローチのすべてがメモリ内の連続した要素ブロックにアクセスしているわけではありませんか?メモリarr[::2]
の不連続ブロックにアクセスすると、arr[:]
よりも遅くなりますが、わずかにしかa
とa[:]
の間の違いと比較するとわずかです。
In [10]: %timeit arr[::2]
221 ns ± 2.96 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
あなたの発言は 'arr [:: 2]'にも当てはまります。これは、インデックスを解析する余分な作業のために遅くなります。 – Eric