2017-07-26 41 views
0

我明白,在cython中,我不能在循環內cdef數組,我必須在循環之前這樣做。如果在循環中我將循環外部初始化的數組設置爲每次迭代時大小不同,會發生什麼?cdef cython中的一個數組,在循環中更改大小,是否有內存問題?

想象這樣的事情:

cdef int i 
cdef int [:] A 
for i in range(100): 
    A = np.zeros(np.random.randint(10, 1000), dtype=np.int32) 

A規模將迭代很大差異迭代。這是否會導致任何類型的內存問題?有人可以解釋一下,當我經歷循環時,究竟發生了什麼?如果這是有問題的,有沒有其他的選擇?謝謝

+0

我建議把這個循環中調用Python代碼,並用2d'A'數組調用Cython函數。處理'A'時注重提高速度。像這樣創建'A'沒有利用Cython的編譯。 – hpaulj

回答

1

沒有問題 - 內存視圖像普通的Python對象一樣被引用計數,所以當新的數組被分配到A時,舊的引用計數會下降到0並釋放。

唯一的例外是你從指針而不是Python對象創建內存視圖,在這種情況下你必須處理內存。儘管如此,這並不適用。

(如@hpaulj在評論說,這將不會得到任何用Cython加速,但我認爲你真正的代碼做更多的工作在環)

相關問題