2013-11-28 17 views
18

Trong tutorial của tài liệu Cython, có cimport và nhập khẩu báo cáo của module NumPy:Cython: cimport và nhập khẩu NumPy như (cả hai) np

import numpy as np 
cimport numpy as np 

tôi thấy ước này là khá phổ biến trong NumPy/cython người dùng.

Điều này có vẻ lạ đối với tôi vì chúng là cả hai được đặt tên là np. Trong đó một phần của mã, nhập/cimported np được sử dụng? Tại sao trình biên dịch cython không gây nhầm lẫn cho chúng?

+2

Vì 'cimport' không thực sự nhập mô-đun (Python). Nó nhập các định nghĩa [(C)] (http://docs.cython.org/src/userguide/sharing_declarations.html#the-cimport-statement). Tôi không biết, nhưng tôi có thể tưởng tượng rằng nếu bạn chuyển dòng thứ hai thành 'cimport numpy' chỉ, mọi thứ sẽ bị phá vỡ: nó rất có thể cần sự tương ứng giữa tên mô-đun Python thực tế như được sử dụng trong tập lệnh và các định nghĩa không gian tên. – Evert

+0

@Evert Bạn cũng có thể sử dụng 'cimport numpy', giống như cách mà người dùng có thể sử dụng' import numpy', nó hoạt động giống như vậy, nhưng 'cimport' cho phép truy cập vào các hàm hoặc thuộc tính C trong mô-đun đã nhập trong khi' import Các hàm hoặc các thuộc tính của Python đến –

Trả lời

21

cimport my_module cho phép truy cập đến C chức năng hoặc các thuộc tính hoặc thậm chí phụ module dưới my_module

import my_module cho phép truy cập đến Python chức năng hoặc các thuộc tính hoặc sub-module dưới my_module.

Trong trường hợp của bạn:

cimport numpy as np 

cung cấp cho bạn truy cập vào numpy C API, nơi bạn có thể khai báo các bộ đệm mảng, loại biến và vân vân ...

Và:

import numpy as np 

cung cấp cho bạn quyền truy cập vào các chức năng NumPy-Python, chẳng hạn như np.array, np.linspace, v.v.

Cython xử lý nội bộ sự mơ hồ này để người dùng không cần phải sử dụng các tên khác nhau.

+1

Là một bổ sung nhỏ: Theo gợi ý của @Saullo Castro, API Numpy C không cung cấp tất cả các chức năng mà cung cấp Python Numpy của bạn cung cấp. Để tìm hiểu xem API C có thể và không thể làm gì, bạn có thể xem qua thư mục 'Include' [] (https://github.com/cython/cython/tree/master/Cython/Includes/numpy) trong Cài đặt Cython. Ở đó bạn sẽ tìm thấy các tập tin '.pxd' Cython nhập khẩu. – m00am

Các vấn đề liên quan