2013-11-28 18 views
18

Nel tutorial della documentazione Cython, ci sono cimport e importare le dichiarazioni del modulo NumPy:Cython: cimport e importare NumPy come (entrambi) np

import numpy as np 
cimport numpy as np 

Ho trovato questa convenzione è molto popolare tra numpy/Cython utenti.

Questo sembra strano per me, perché sono entrambi nominato come np. In quale parte del codice vengono utilizzati import/cimported np? Perché il compilatore cython non li confonde?

+2

Perché 'cimport' non importa realmente un modulo (Python). Importa [(C) definizioni] (http://docs.cython.org/src/userguide/sharing_declarations.html#the-cimport-statement). Non lo so, ma potrei immaginare che se si trasforma solo la seconda riga in 'cimport numpy', le cose si spezzerebbero: potrebbe essere molto utile la corrispondenza tra il vero nome del modulo Python usato nello script e le definizioni namespace. – Evert

+0

@Evert Puoi anche usare 'cimport numpy', nello stesso modo in cui si potrebbe usare' import numpy', funziona allo stesso modo, ma 'cimport' dà accesso alle funzioni o agli attributi C sotto il modulo importato mentre 'import 'a funzioni o attributi Python –

risposta

21

cimport my_module dà accesso a C funzioni o attributi o addirittura sottomoduli sotto my_module

import my_module dà accesso a Python funzioni o attributi o sottomoduli sotto my_module.

Nel tuo caso:

cimport numpy as np 

dà accesso alle Numpy API C, dove è possibile dichiarare i buffer di array, tipi di variabili e così via ...

E:

import numpy as np 

consente di accedere alle funzioni di NumPy-Python, come ad esempio np.array, np.linspace, ecc.

Cython gestisce internamente questa ambiguità in modo che l'utente non debba utilizzare nomi diversi.

+1

Come piccola aggiunta: come suggerito da @ Castro Castro, l'API Numpy C non offre tutte le funzioni offerte da Python Numpy. Per scoprire cosa può o non può fare l'API C puoi dare un'occhiata alla cartella "Include" [cartella] (https://github.com/cython/cython/tree/master/Cython/Include/numpy) nel tuo Installazione di Cython. Lì troverai i file '.pxd' importati da Cython. – m00am