Я пытаюсь Cython ускорить некоторый класс. Но я все еще хочу, чтобы код работал в чистом Python.Cython и массивы
Как определить массив в классе (код упрощен)
import cython
class A:
def __init__(self):
if cython.compiled:
# This will work in Cython
for k in len(self.S):
self.S[k]=k
else:
# This will work in interpreter
self.S=range(8)
def test(self):
self.S[0]+=1
И в .pxd:
import cython
cdef class A
cdef int[8] S
cdef test(self)
Но Cython жалуется на компиляции:
Cannot convert Python object to 'int [8]'
Просто комментарий, непосредственно не связанные с вашим вопросом, но если вы хотите 'Cython-compiled' часть чтобы полностью использовать ускорение Cython, вы всегда должны «cdef» ваши переменные приращения: 'cdef k' ... –
Моя цель состояла в том, чтобы ускорить метод тестирования. который (в более упрощенной версии более сложный) называется миллионы раз, а __init__ - только один раз, –
Конечно, я получил это. Это было очень общее замечание, адресованное другим людям, которые восприимчивы к чтению этой темы. Cheers;) –