2012-06-12 40 views
7

gì là khó hiểu ở đây là nếu bạn muốn tạo một mảng bạn sử dụngSự khác nhau giữa "số nhận dạng loại" và "loại" trong Cython là gì?

chunk = np.array ([[94.,3.],[44.,4.]], dtype=np.float64) 

Nhưng nếu bạn muốn xác định loại bên trong một tài liệu tham khảo buffer, bạn sử dụng

cdef func1 (np.ndarray[np.float64_t, ndim=2] A): 

    print A 

Chú ý sự khác biệt giữa np.float64np.float64_t.

đoán của tôi

Tôi đoán rằng một type identifier là những gì được tạo ra một cách rõ ràng w/các Cython C-like typedef cú pháp

ctypedef np.float64_t dtype_t 

Nhưng NumPy type chỉ là loại Python <type 'type'>.

>>> type (np.float64) 
<type 'type'> 

Tài liệu gọn gàng trên dtype s không giúp tôi. http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html

Trả lời

6

trong mã cython của bạn, bạn cần làm:

import numpy as np 
cimport numpy as np 

module đầu tiên dòng nhập khẩu NumPy trong không gian trăn, nhưng dòng thứ hai chỉ bao gồm numpy.pxd trong không gian cython.

bạn có thể tìm thấy thư mục numpy.pxd trong thư mục cài đặt cython. Nó xác định float64_t là:

ctypedef double  npy_float64 
ctypedef npy_float64 float64_t 
+0

Ok, có vẻ như hầu hết {float, int} {32,64} _t là loại C gấp đôi, mở rộng sang Python. Mặc dù tôi không thể tìm thấy đề cập đến các loại mà không có "_t", ít nhất là trong numpy.pxd – HeyWatchThis

+0

Các loại không có "_t" xuất phát từ "nhập gọn gàng", không phải từ "cimport numpy". Nếu điều này là khó hiểu, bạn có thể làm "cimport numpy as cnp" để xem sự khác biệt. –

+0

Có, tôi cũng đọc nó, duyệt qua [http://cython.readthedocs.org/en/latest/src/tutorial/numpy.html]. Bạn có thể thêm nó như một câu trả lời và tôi sẽ chấp nhận, hoặc cuối cùng tôi sẽ thêm nó. – HeyWatchThis

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