How to properly pass a scipy.sparse CSR matrix to a cython function?

后端 未结 3 2091
孤城傲影
孤城傲影 2020-12-15 13:20

I need to pass a scipy.sparse CSR matrix to a cython function. How do I specify the type, as one would for a numpy array?

3条回答
  •  醉酒成梦
    2020-12-15 14:22

    Here is an example about how to quickly access the data from a coo_matrix using the properties row, col and data. The purpose of the example is just to show how to declare the data types and create the buffers (also adding the compiler directives that will usually give you a considerable boost)...

    #cython: boundscheck=False
    #cython: wraparound=False
    #cython: cdivision=True
    #cython: nonecheck=False
    
    import numpy as np
    from scipy.sparse import coo_matrix
    cimport numpy as np
    
    ctypedef np.int32_t cINT32
    ctypedef np.double_t cDOUBLE
    
    def print_sparse(m):
        cdef np.ndarray[cINT, ndim=1] row, col
        cdef np.ndarray[cDOUBLE, ndim=1] data
        cdef int i
        if not isinstance(m, coo_matrix):
            m = coo_matrix(m)
        row = m.row.astype(np.int32)
        col = m.col.astype(np.int32)
        data = m.data.astype(np.float64)
        for i in range(np.shape(data)[0]):
            print row[i], col[i], data[i]
    

提交回复
热议问题