Мои setup.py:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy as np
extensions = [
Extension('_hmmc', ['_hmmc.pyx'], include_dirs = [np.get_include()]),
]
setup(
ext_modules = cythonize(extensions)
)
и я экспериментирую с cimport, чтобы заставить его работать.
from numpy.math cimport expl
import numpy as np
print(expl(5-2))
Тем не менее, ошибки
ошибка LNK2001: неразрешенный внешний символ _npy_expl
Любая идея? Я проверил, что мой cython/includes/numpy/math.pxd имел это:
long double expl "npy_expl" (long double x)
Есть идеи?
Вероятно, для простоты, можно использовать exp
из стандартной библиотеки, в противном случае есть несколько npy_expl
через которые можно перейти с помощью npy_expl
.
Обычный Numpy-API предназначен только для заголовков, но это не относится к математическим функциям. Существует определение NPY_INLINE_MATH
, которое также представляет библиотеку numpy math как встроенные функции, но это не будет работать на установленных numpy-distributionen, поскольку в них отсутствует core/src
-folder, где даны определения математических функций.
Таким образом, вы должны добавить предварительно скомпилированную статическую библиотеку numpy math к вашей установке. Его можно найти в папке core/lib
и называется (по крайней мере, в Linux) libnpymath.a
:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy as np
import os
npymath_path = os.path.join(os.path.dirname(np.get_include()), 'lib')
extensions = [
Extension('_hmmc', ['_hmmc.pyx'],
include_dirs = [np.get_include()],
libraries = ['npymath'],
library_dirs=[npymath_path]
),
]
setup(
ext_modules = cythonize(extensions)
)
Я не знаю лучшего способа получить npymath_path
: есть функция get_mathlibs
из numpy.distutils.misc_util
но она работает только в случае _numpyconfig.h
что не так, по крайней мере, в моей установке.