理解python中的切片

时间:2014-11-20 09:21:05

标签: arrays python-2.7 numpy slice

import numpy as np

x = np.arange(10**5)

for i in xrange(x.size):
    foo(x[3000:40000])

以及上面代码的另一个版本

import numpy as np

x = np.arange(10**5)
slice_of_x = x[3000:40000] 
for i in xrange(x.size):
    foo(slice_of_x)

第二个代码会更快吗?我倾向于用C中的指针来思考(所以事实上第一个可能更快)但我知道python不是C。

O.k。这个帖子 Slicing a list in Python without generating a copy 回答我的问题。

1 个答案:

答案 0 :(得分:1)

阅读此http://scipy-lectures.github.io/advanced/advanced_numpy/#life-of-ndarray,特别是Slicing with integers部分。

从[切片]页面

  

一切都可以通过改变形状,步幅和可能的数据指针来表示!   永远不要复制数据

因此创建切片的开销很小:构建一个存储几个元组的Python对象和一个指向数据的指针。

在第一个代码示例中,每次都在循环中创建切片。在第二个示例中,您将创建一次切片。对于您选择编写的大多数函数foo,差异可能是微不足道的。