我正在尝试使用Cython来加速回答here。我尝试编译代码(在执行完解释为here的cygwinccompiler.py
黑客之后),但得到一个fatal error: numpy/arrayobject.h: No such file or directory...compilation terminated
错误。谁能告诉我这是我的代码的问题,还是Cython的一些深奥的微妙之处?
下面是我的代码。
import numpy as np
import scipy as sp
cimport numpy as np
cimport cython
cdef inline np.ndarray[np.int, ndim=1] fbincount(np.ndarray[np.int_t, ndim=1] x):
cdef int m = np.amax(x)+1
cdef int n = x.size
cdef unsigned int i
cdef np.ndarray[np.int_t, ndim=1] c = np.zeros(m, dtype=np.int)
for i in xrange(n):
c[<unsigned int>x[i]] += 1
return c
cdef packed struct Point:
np.float64_t f0, f1
@cython.boundscheck(False)
def sparsemaker(np.ndarray[np.float_t, ndim=2] X not None,
np.ndarray[np.float_t, ndim=2] Y not None,
np.ndarray[np.float_t, ndim=2] Z not None):
cdef np.ndarray[np.float64_t, ndim=1] counts, factor
cdef np.ndarray[np.int_t, ndim=1] row, col, repeats
cdef np.ndarray[Point] indices
cdef int x_, y_
_, row = np.unique(X, return_inverse=True); x_ = _.size
_, col = np.unique(Y, return_inverse=True); y_ = _.size
indices = np.rec.fromarrays([row,col])
_, repeats = np.unique(indices, return_inverse=True)
counts = 1. / fbincount(repeats)
Z.flat *= counts.take(repeats)
return sp.sparse.csr_matrix((Z.flat,(row,col)), shape=(x_, y_)).toarray()
发布于 2013-02-04 07:24:35
对于像您这样的单文件项目,另一种选择是使用pyximport
。您不需要创建setup.py
...如果你使用IPython,你甚至不需要打开命令行...这一切都非常方便。在您的示例中,尝试在IPython或普通Python脚本中运行以下命令:
import numpy
import pyximport
pyximport.install(setup_args={"script_args":["--compiler=mingw32"],
"include_dirs":numpy.get_include()},
reload_support=True)
import my_pyx_module
print my_pyx_module.some_function(...)
...
当然,您可能需要编辑编译器。这使得导入和重新加载.pyx
文件的效果与.py
文件的效果相同。
发布于 2013-02-02 08:46:55
该错误意味着在编译期间找不到numpy头文件。
尝试执行export CFLAGS=-I/usr/lib/python2.7/site-packages/numpy/core/include/
,然后进行编译。这是几个不同包的问题。在ArchLinux中有一个针对相同问题的bug:https://bugs.archlinux.org/task/22326
发布于 2015-04-14 20:42:15
简单的答案
一种更简单的方法是将路径添加到文件distutils.cfg
。默认情况下,它代表Windows7的路径是C:\Python27\Lib\distutils\
。您只需断言以下内容,它就会正常工作:
[build_ext]
include_dirs= C:\Python27\Lib\site-packages\numpy\core\include
整个配置文件
为了给你一个配置文件的例子,我的整个文件是这样的:
[build]
compiler = mingw32
[build_ext]
include_dirs= C:\Python27\Lib\site-packages\numpy\core\include
compiler = mingw32
https://stackoverflow.com/questions/14657375
复制相似问题