Я знаю, что эта проблема поднималась несколько раз раньше, но ни один из ответов не помог мне. Кажется, что (как и в случае с f2py) есть некоторые средства для Linux, тогда как для Windows ...? Я использую последнюю версию Anaconda3 в Windows 10 Edu
. Я нашел arrayobject.h в C: \ Users \ RAU \ anaconda3 \ Lib \ site-packages \ numpy \ core \ include \ numpy и установите переменную среды Windows для пути в
C: \ Users \ RAU \ anaconda3 \ Lib \ site-packages \ numpy \ core \ include \ numpy
и пробовал также
C: \ Users \ RAU \ anaconda3 \ Lib \ site-packages \ numpy \ core \ include
Я также пытался изменить distutils.cfg как
[build]
compiler = msvc
[build_ext]
include_dirs= C:\Users\RAU\anaconda3\Lib\site-packages\numpy\core\include
compiler = msvc
и я попробовал несколько рекомендаций относительно set-up.py:
from setuptools import setup
from Cython.Build import cythonize
import numpy as np
#setup(ext_modules=cythonize("test_1.pyx",
# include_dirs=[np.get_include()]))
setup(ext_modules=cythonize("test_1.pyx"),
include_path = [np.get_include()],
zip_safe=False)
#setup(ext_modules=cythonize("test_1.pyx"),
# zip_safe=False)
но пока не повезло ...
Заранее большое спасибо за вашу помощь!
Итак, я попытался
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy as np # <---- New line
ext_modules = [Extension("test", ["test_1.pyx"],
include_dirs=[np.get_include()])] # <---- New argument
setup(
name = 'Test app',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules
)
, и это действительно сработало! Миллион благодарностей за это!
А потом: у меня была очень маленькая программа для тестирования np.arrays, и я следовал различным примерам из docs et c. - Теперь, спустя некоторое время, я обнаружил, что мне нужно импортировать и импортировать numpy, так что это работает:
cimport numpy as np
import numpy as nump
cpdef test(double a, double b):
cdef double c
cdef int i, n
#cdef np.ndarray[np.float64_t] e
#cdef np.ndarray e = np.zeros([2], dtype=DYTYPE)
#cdef np.ndarray[double, mode='c'] e = nump.array([-4.626129e1, 2.060225e-2], dtype=float)
cdef np.ndarray[double, mode='c'] e = nump.array([-4.626129e1, 2.060225e-2])
c = 0
n = 1000000000
for i in range(1,n):
c += a + e[0]
return c
В противном случае я получил бы что-то вроде "у cimported module нет атрибута 'array'" или " Модуль cimported не имеет атрибута «нули».
Код выполняется довольно быстро (1,2 с против 386 с в чистом Python!), поэтому я вполне доволен этим - но я уверен, что смогу улучшить это по красоте ...?