2013-11-28 2 views
18

В tutorial документации Cython, есть cimport и импорта заявления Numpy модуля:Cython: cimport и импорт NumPy, как (и) нп

import numpy as np 
cimport numpy as np 

Я нашел это соглашение является весьма популярным среди NumPy/Cython пользователи.

Это выглядит странно для меня, потому что они оба названных как нп. В какой части кода используются импортированные/cimported np? Почему компилятор cython не путает их?

+2

Поскольку 'cimport' не импортирует (Python) модуль. Он импортирует определения [(C)] (http://docs.cython.org/src/userguide/sharing_declarations.html#the-cimport-statement). Я не знаю, но я мог представить, что если вы перевернете вторую строку только в 'cimport numpy', все сломается: ей может очень понадобиться соответствие между фактическим именем модуля Python, используемым в скрипте, и определениями Пространство имен. – Evert

+0

@Evert Вы также можете использовать 'cimport numpy', так же, как можно использовать' import numpy', он работает точно так же, но 'cimport' предоставляет доступ к функциям или атрибутам C под импортированным модулем, а' import 'к функциям или атрибутам Python –

ответ

21

cimport my_module дает доступ к C функций или атрибутов или даже суб-модулей под my_module

import my_module предоставляет доступ к Python функций или атрибутов или суб-модулей под my_module.

В вашем случае:

cimport numpy as np 

дает вам доступ к Numpy C API, где вы можете объявить буферы массива, типы переменных и так далее ...

И:

import numpy as np 

дает вам доступ к функциям NumPy-Python, таким как np.array, np.linspace и т. Д.

Cython внутренне справляется с этой двусмысленностью, так что пользователю не нужно использовать разные имена.

+1

В качестве небольшого дополнения: как подсказывает @Saullo Castro, API Numpy C не предлагает все функции, предлагаемые вашим Python Numpy. Чтобы узнать, что C API может и не может сделать, вы можете взглянуть на 'Includes' [folder] (https://github.com/cython/cython/tree/master/Cython/Includes/numpy) в своем Установка Cython. Там вы найдете файлы .pxd' Cython. – m00am

Смежные вопросы