2017-04-09 38 views

回答

2

这可能意味着“优化[与纯Python代码相比]”。有不同种类的切片,其中大多数在Python中已经非常快,只有很少的速度可以加速。例如,如果您使用f[:,w],您将看到数组f。它涉及一些开销,因为必须创建“视图”,但它已经非常快,因为它(不包括某些高级索引操作)只是一个内存视图。

然而,Cython可以显着加速的是:访问数组中的单个元素。这是Python代码中非常低效的操作,因为元素在访问时必须“作为Python对象装箱”。当使用“完全ndim类型的整数索引”时,Cython可以避免这种“装箱”。

所以它不是像f[:,w]没有优化。 numpy已经优化了。 Cython无法在那里提高(很多)。

+0

':'是'切片(无)'。我认为cython会继续使用python/numpy调用,而不是用纯c代码替换它。 – hpaulj

+0

尽管键入的记忆体支持切片和视图。 – hpaulj

+0

@hpaulj是的,他们明确提到,在链接教程中,原因是“您可以继续使用Python对象进行复杂的动态切片等,就像数组未输入时一样。”不知道这如何与记忆体相关,但我想他们支持大部分类似数组的切片操作? – MSeifert