我的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)
有什么想法吗?
答案 0 :(得分:0)
可能为了简单起见,可以使用标准库中的exp
,否则可能会遇到麻烦,以使其与npy_expl
一起使用。
通常的Numpy-API是仅标头的,但数学函数不是这种情况。有定义的NPY_INLINE_MATH
,它也将numpy的数学库显示为内联函数,但是这在已安装的numpy-distributionen上不起作用,因为它们缺少core/src
文件夹,其中数学函数的定义给出了。
因此,您必须将预编译的static numpy's math library添加到设置中。可以在文件夹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
才有效至少在我的安装中。