2 回答

TA貢獻1951條經(jīng)驗 獲得超3個贊
附上我可以從您的郵件中得到的答復(fù)。
在Cython中可以使用Python對象,但是一旦您使用了
cdef
某些部分,就會受到限制。嘗試通過“聯(lián)合國”-捍衛(wèi)字典。您所犯的錯誤表明您有一個表達式,
x[y]
其中x
有一個元組和y
一個int。原則上,它應(yīng)該可以正常工作(用int應(yīng)該為一個元組建立索引就可以了)。因此,您可以查看Cython中的方括號,以了解其來源。您提到刪除了pxd文件。然后,您是否將擴展類/其他類型定義的完整聲明移至pyx文件?

TA貢獻1804條經(jīng)驗 獲得超8個贊
擴展類型在編譯中不是問題(至少在與主要cdef函數(shù)位于同一pyx文件中聲明時);該錯誤發(fā)生在其他地方。
已解決:
AssertionError是由對該元組的簡單索引訪問引起的。
元組聲明為:
cdef:
tuple curIRs
…并在嵌套循環(huán)中設(shè)置為:
for deriv1 in xrange(len(L1)):
for deriv2 in xrange(len(L2)):
curIRs = (deriv2, deriv1)
…并訪問元組索引:
d1[ix] = (curIRs[0], curIRs[1])
這顯然是無害的監(jiān)督,curIRs不僅僅被存儲,而是實質(zhì)上通過索引訪問來復(fù)制它。但是,這是由于未知原因而發(fā)生錯誤的地方:
當(curIRs [0],curIRs [1])替換為curIRs時,將AssertionError停止。
如評論中所述,由于pyx文件中的main函數(shù)是在python腳本中調(diào)用的,因此無法使用cdef對其進行定義。
Pierre de Buyl在評論中的建議非常有幫助:“刪除潛在問題變量的cdef聲明,直到錯誤解決?!?即在Python中可能沒有錯誤的地方,Cython中可能會發(fā)現(xiàn)不兼容的地方
添加回答
舉報