繁体   English   中英

访问numpy数组'arr'的速度明显比'arr [:]'快

[英]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

以上所有方法不是访问内存中连续的元素块吗? aa[:]之间的差异相比,访问存储器arr[::2]不连续的块要比arr[:]慢,但仅略微如此。

In [10]: %timeit arr[::2]
221 ns ± 2.96 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

arrarr[:]都没有实际访问数组的缓冲区。 arr仅加载对数组的引用,而arr[:]构造一个由相同缓冲区支持的新对象。 arr[:]昂贵得多,与对象创建有关,但实际上它对后备缓冲区实际上没有任何作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM