3
我想創建一個信號處理算法,需要在numpy數組中保存一些內部狀態。如何在cython中聲明全局numpy.ndarray?
對於速度,我的編碼,在用Cython,並宣佈國家的全局變量是這樣的:
import numpy as np
cimport numpy as np
cdef np.ndarray delay_buffer
不過,我真正想做的是這樣的:
import numpy as np
cimport numpy as np
DTYPE = np.float32
ctypedef np.float32_t DTYPE_t
cdef np.ndarray[DTYPE_t] delay_buffer
這是我可以做其他任何事情,但不在全球範圍內。有什麼辦法可以做到這一點?
好吧,memoryviews沒有ndarray方法,如shape(),max()等。 –
*通常*最好在非類型化數據上使用Python函數以降低開銷。然後你會得到'delay_buffer = delay_array = ...'這樣的''delay_array'是無類型的。但我也經常建議展開像'max'這樣的循環到內聯的Cython函數中,因爲開銷通常較低。 //還有memoryviews * do *有一個'shape'屬性。 //最後,在瓶頸情況之外,你可以運行'np.max(memoryview)'來製作一個非複製的Numpy數組,因此具有很高的持續開銷,但看起來幾乎一樣漂亮。 – Veedrac
非常感謝Veedrac!我很抱歉,由於我的無知,我發表了自己的觀點 - 我不知道記憶體視覺也有一個形狀屬性。並且,可以認爲@JoshAdel,memoryviews也可以強制np.ndarray。 http://docs.cython.org/src/userguide/memoryviews.html#coercion-to-numpy –