我目前正試圖轉換下面的循環,以用Cython:蟒蛇用Cython - 消除蟒蛇電話
cimport numpy as np
cimport cython
@cython.boundscheck(False) # turn of bounds-checking for entire function
def Interpolation(cells, int nmbcellsx):
cdef np.ndarray[float, ndim=1] x,y,z
cdef int i,j,len
for i in range(nmbcellsx):
x = cells[i].x
y = cells[i].y
z = cells[i].z
len = x.size
for j in range(len):
x[j] = x[j] * y[j] * z[j]
return 0
到目前爲止,一切看起來都種好了,但訪問細胞[I] *仍然需要。 python調用。這防止了i-循環的並行化。
下面是一個用Cython反饋(與用Cython -a生成):
因此這樣的問題:如何刪除這些蟒回調(即,使得線9-12成爲白色)?
當試圖增加該小區的種類是這樣的:
cimport numpy as np
cimport cython
cdef class cell_t:
cdef np.ndarray x,y,z
@cython.boundscheck(False) # turn of bounds-checking for entire function
def Interpolation(np.ndarray[cell_t,ndim=1] cells, int nmbcellsx):
cdef np.ndarray[float, ndim=1] x,y,z
cdef int i,j,len
for i in range(nmbcellsx):
x = cells[i].x
y = cells[i].y
z = cells[i].z
len = x.size
for j in range(len):
x[j] = x[j] * y[j] * z[j]
return 0
我收到以下用Cython誤差:D型細胞必須是「對象」,數值類型或一個結構(它被抱怨cell_t聲明)
多謝內。
什麼類型是'cells'說法。如果你給Cython提示它,你可能會讓它識別它。 – Wessie
也作爲附註。你似乎沒有從與循環相關的函數中返回任何東西,也沒有循環變異任何非本地的東西。只是單挑。 – Wessie
這只是一個更復雜功能的簡單例子。細胞實際上是一個叫做細胞的對象的一個numpy ndarray。我們只是說Cell類只有numpy數組x,y和z。我該如何解決這個問題? – user1829358