Я пытаюсь написать некоторый код на Cython для вычислений с массивами numpy.Кажется, Cython не нравится [], используемый во всех примерах, которые я видел, чтобы определить тип данных и число измерений.
Например, у меня есть файл test.pyx:
cimport numpy as np
import numpy as np
ctypedef np.ndarray[np.float64_t, ndim=2] mymatrix
cpdef mymatrix hat (mymatrix x):
a = np.zeros((3,3));
a[0,1] = x[2,0];
a[0,2] = -x[1,0];
a[1,2] = x[0,0];
a[1,0] = -x[2,0];
a[2,0] = x[1,0];
a[2,1] = -x[0,0];
return a;
Я компилирую его, используя setup.py (см. Конец поста), который запускаю с помощью "python setup.py".build_ext --inplace "
Я получаю следующий вывод:
running build_ext
cythoning test.pyx to test.c
Error converting Pyrex file to C:
------------------------------------------------------------
...
cimport numpy as np
import numpy as np
ctypedef np.ndarray[np.float64_t, ndim=2] mymatrix
^
------------------------------------------------------------
test.pyx:4:42: Syntax error in ctypedef statement
<snip, irrelevant>
, тогда как, если я удаляю часть" [np.float64_t, ndim = 2] ", она работает нормально.
У кого-нибудь есть идеи?
Что касается настройки моей системы: ОС: Windows XP
полная, полная установка pythonxy, версия 2.6.5.1 (последняя на данный момент)
pythonxy предположительно поставляется с cython,но я закончил тем, что установил cython версии 0.12.1 для Python 2.6 с этого сайта: http://www.lfd.uci.edu/~gohlke/pythonlibs/#cython
Я подозреваю, что мне почему-то не хватает пути или чего-то другого: я решил некоторые проблемы, явно добавив директорию файла заголовка numpyк пути включения, используемому mingw (см. файл setup.py ниже)
вот тот файл setup.py, о котором я упоминал:
from distutils.core import setup
from distutils.extension import Extension
from distutils.sysconfig import get_python_inc
from Cython.Distutils import build_ext
import os.path
inc_base = get_python_inc( plat_specific=1 );
incdir = os.path.join( get_python_inc( plat_specific=1 ), );
#libraries=['math'],
ext_modules = [Extension("test",
["test.pyx"],
include_dirs = [
os.path.join(inc_base,'..\\Lib\\site-packages\\numpy\\core\\include\\numpy'),
]
)
]
setup(
name = 'test',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules
)