我学Cython和整个本SNIPPIT的代码传来:用Cython:对于i从1 <= I <N
import numpy as np
cimport numpy as np
def mean(np.ndarray[np.double_t] input):
cdef np.double_t cur
# Py_ssize_t is numpy's index type
cdef Py_ssize_t i
cdef Py_ssize_t N = len(input)
for i from 0 <= i < N:
cur += input[i]
return cur/N
a=np.array([1,2,3,4], dtype=np.double)
显然,这将返回一个其为2.5的平均值。我的问题是这样的:
for循环是Python循环,Cython还是C?
我做了一些幼稚timeit测试和两个循环结构出现有关与数组大小大相同的时间内运行英寸任何人都可以确认吗?我只是好奇为什么这个特定snippit的作者选择在现代代码中使用旧的结构。 –
当天,Cython不会优化'for i in range(10)',所以它实际上会创建一个长度为10的列表,并使用Python回调函数对其进行迭代。由于这个原因,Pyrex/Cython引入了for ... from ...语法,这可以归结为C语言。我有时仍然使用较老的语法,因为它更清晰地表明这个代码已经优化。 – carl