考慮這個啞用Cython代碼:用Cython Memoryview作爲返回值
#!python
#cython: boundscheck=False
#cython: wraparound=False
#cython: initializedcheck=False
#cython: cdivision=True
#cython: nonecheck=False
import numpy as np
# iterator function
cdef double[:] f(double[:] data):
data[0] *= 1.01
data[1] *= 1.02
return data
# looping function
cdef double[:] _call_me(int bignumber, double[:] data):
cdef int ii
for ii in range(bignumber):
data = f(data)
return data
# helper function to allow calls from Python
def call_me(bignumber):
cdef double[:] data = np.ones(2)
return _call_me(bignumber, data)
現在,如果我做了用Cython -a這一點,它用黃色顯示return語句。我在一個非常關鍵的程序中做了類似的事情,根據分析,這實際上減慢了我的代碼速度。那麼,爲什麼cython需要這些返回語句的python?附加說明文件給出了一個暗示:
PyErr_SetString(PyExc_TypeError,"Memoryview return value is not initialized");
令人驚訝的是,谷歌搜索用Cython「未初始化Memoryview返回值」給出結果爲零。
Cython版本0.19.2 – HenriV
在你真實的代碼中,你需要返回memoryview還是可以像這樣修改它?做這些改變使我有40倍的加速。我不確定是否有辦法切換檢查... – jorgeca
真正的代碼迭代求解常微分方程,所以是的,我確實需要返回它。 – HenriV