«numpy / arrayobject.h»: нет такого файла или каталога - Windows 10 - PullRequest
0 голосов
/ 16 апреля 2020

Я знаю, что эта проблема поднималась несколько раз раньше, но ни один из ответов не помог мне. Кажется, что (как и в случае с 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!), поэтому я вполне доволен этим - но я уверен, что смогу улучшить это по красоте ...?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...