[英]Markedly faster to access a numpy array 'arr' than '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
以上所有方法不是访问内存中连续的元素块吗? 与a
和a[:]
之间的差异相比,访问存储器arr[::2]
不连续的块要比arr[:]
慢,但仅略微如此。
In [10]: %timeit arr[::2]
221 ns ± 2.96 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
arr
和arr[:]
都没有实际访问数组的缓冲区。 arr
仅加载对数组的引用,而arr[:]
构造一个由相同缓冲区支持的新对象。 arr[:]
昂贵得多,与对象创建有关,但实际上它对后备缓冲区实际上没有任何作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.