tôi đang học Cython và đã xem qua snippit mã này:Cython: for i từ 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)
Rõ ràng, điều này trả về giá trị trung bình của một đó là 2,5. Câu hỏi của tôi là thế này:
là vòng lặp for một vòng lặp Python, Cython, hay C?
tôi đã làm một số xét nghiệm timeit ngây thơ và cả cấu trúc vòng lặp xuất hiện để chạy trong khoảng cùng một lượng thời gian với kích thước mảng lớn. bất cứ ai có thể xác nhận điều này? Tôi chỉ tò mò tại sao tác giả của đoạn trích cụ thể này lại chọn sử dụng cấu trúc cũ hơn trong mã hiện đại. –
Trở lại trong ngày, Cython sẽ không tối ưu hóa 'for i in range (10) ', vì vậy nó sẽ thực sự tạo ra một danh sách dài 10 và lặp trên nó sử dụng Python lưng gọi. Do đó, Pyrex/Cython đã giới thiệu cú pháp ... từ ..., sẽ đun sôi xuống C. Tôi đôi khi vẫn sử dụng cú pháp cũ hơn vì rõ ràng hơn là mã này được tối ưu hóa. – carl