Truyền mảng dumppe np.float64_t
hoạt động tốt (bên dưới), nhưng tôi không thể chuyển mảng chuỗi.Làm thế nào để vượt qua một loạt các chuỗi các loại chuỗi đến một hàm trong Cython
Đây là những gì hoạt động:
# cython_testing.pyx
import numpy as np
cimport numpy as np
ctypedef np.float64_t dtype_t
cdef func1 (np.ndarray[dtype_t, ndim=2] A):
print A
def testing():
chunk = np.array ([[94.,3.],[44.,4.]], dtype=np.float64)
func1 (chunk)
Nhưng tôi không thể làm cho công việc này: tôi không thể tìm thấy phù hợp 'định danh loại' cho dtypes chuỗi NumPy.
# cython_testing.pyx
import numpy as np
cimport numpy as np
ctypedef np.string_t dtype_str_t
cdef func1 (np.ndarray[dtype_str_t, ndim=2] A):
print A
def testing():
chunk = np.array ([['huh','yea'],['swell','ray']], dtype=np.string_)
func1 (chunk)
Các lỗi biên dịch là:
Error compiling Cython file:
------------------------------------------------------------
ctypedef np.string_t dtype_str_t
^
------------------------------------------------------------
cython_testing.pyx:9:9: 'string_t' is not a type identifier
CẬP NHẬT
mỗi nhìn qua numpy.pxd
, tôi thấy ctypedef
câu sau đây. Có lẽ đó là đủ để nói rằng tôi có thể sử dụng uint8_t
và giả vờ tất cả mọi thứ là bình thường, miễn là tôi có thể làm một số đúc?
ctypedef unsigned char npy_uint8
ctypedef npy_uint8 uint8_t
Chỉ cần xem mức độ tốn kém mà quá trình truyền sẽ diễn ra.
Cảm ơn. Tôi upvoted câu trả lời của bạn. Mặc dù tôi hy vọng có một công việc xung quanh bằng cách sử dụng mảng Numpy Structured [http://docs.scipy.org/doc/numpy/user/basics.rec.html#structured-arrays]. Nhưng tôi vẫn đang tìm cách vượt qua một trong số đó. – HeyWatchThis
Ít nhất với mục đích của tôi, sử dụng cProfile, có vẻ như bạn vẫn có thể truyền mảng Numpy bằng cách gõ, trong Cython. Nhưng bạn không nhận được tối ưu hóa Cython được mô tả trong tài liệu tham khảo readthedocs.org của bạn. – HeyWatchThis
Có thể sử dụng chúng từ từ vẫn tốt hơn là không thể sử dụng chúng ở tất cả, mặc dù, phải không? – JAB