簡體   English   中英

使用Cython包裝C ++模板以接受任何numpy數組

[英]Using Cython to wrap a c++ template to accept any numpy array

我正在嘗試將用c ++編寫的並行排序包裝為模板,以將其與任何數字類型的numpy數組一起使用。 我正在嘗試使用Cython來做到這一點。

我的問題是我不知道如何將指向正確類型的numpy數組數據的指針傳遞給C ++模板。 我相信我應該為此使用融合dtypes,但是我不太了解如何使用。

.pyx文件中的代碼如下

# importing c++ template
cdef extern from "test.cpp":
    void inPlaceParallelSort[T](T* arrayPointer,int arrayLength)

def sortNumpyArray(np.ndarray a):
    # This obviously will not work, but I don't know how to make it work. 
    inPlaceParallelSort(a.data, len(a))

過去,我對所有可能的dtype進行了丑陋的for循環處理,但是我相信應該有更好的方法來執行此操作。

是的,您想使用一種融合類型來讓Cython調用排序模板以使模板適當地專業化。 這是所有非復雜數據類型的工作示例,該示例使用std::sort

# cython: wraparound = False
# cython: boundscheck = False

cimport cython

cdef extern from "<algorithm>" namespace "std":
    cdef void sort[T](T first, T last) nogil

ctypedef fused real:
    cython.char
    cython.uchar
    cython.short
    cython.ushort
    cython.int
    cython.uint
    cython.long
    cython.ulong
    cython.longlong
    cython.ulonglong
    cython.float
    cython.double

cpdef void npy_sort(real[:] a) nogil:
    sort(&a[0], &a[a.shape[0]-1])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM