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 回答我的问题。
答案 0 :(得分:1)
阅读此http://scipy-lectures.github.io/advanced/advanced_numpy/#life-of-ndarray,特别是Slicing with integers部分。
从[切片]页面
一切都可以通过改变形状,步幅和可能的数据指针来表示! 永远不要复制数据
因此创建切片的开销很小:构建一个存储几个元组的Python对象和一个指向数据的指针。
在第一个代码示例中,每次都在循环中创建切片。在第二个示例中,您将创建一次切片。对于您选择编写的大多数函数foo
,差异可能是微不足道的。