Ошибка Cython / Armadillo: преобразование scipy.sparse.csc_matrix в SpMat - PullRequest
0 голосов
/ 21 февраля 2019

В настоящее время я обертываю библиотеку Armadillo в Cython, и у меня возникли проблемы с преобразованием scipy.sparse.csc_matrix в Python через Cython в класс разреженной матрицы из Armadillo.

Функция, которая на самом деле похожа наthis:

cdef inline SpMat[double] * sp_to_spmatp(X):
    cdef np.ndarray[int, ndim = 1, mode = 'c'] col_ptrs = X.indptr
    cdef np.ndarray[int, ndim = 1, mode = 'c'] row_indices = X.indices
    cdef np.ndarray[double, ndim = 1, mode = 'c'] values = X.data
    cdef SpMat[double] *p_spRes = new SpMat[double](<int*> &row_indices[0], <int*> &col_ptrs[0], <double*> &values[0], X.shape[0], X.shape[1])
    return p_spRes

, где X - это разреженная матрица от scipy и p_spRes - разреженная матрица от Armadillo.

При ее построении я получаю эту ошибку:

arma_wrapper.cpp: 3418: 549: ошибка: нет соответствующей функции для вызова 'arma :: SpMat :: SpMat (int *, int *, double *, int &, int &)'

вместе с:

    Armadillo/include/armadillo_bits/SpMat_bones.hpp:103:10: note: candidate: template<class T1, class T2, class T3> arma::SpMat<eT>::SpMat(const arma::Base<long long unsigned int, T1>&, const arma::Base<long long unsigned int, T2>&, const arma::Base<eT, T3>&, arma::uword, arma::uword)
   inline SpMat(const Base<uword,T1>& rowind, const Base<uword,T2>& colptr, const Base<eT,T3>& values, const uword n_rows, const uword n_cols);
          ^~~~~
Armadillo/include/armadillo_bits/SpMat_bones.hpp:103:10: note:   template argument deduction/substitution failed:
arma_wrapper.cpp:3418:549: note:   mismatched types ‘const arma::Base<long long unsigned int, T1>’ and ‘int*’
 ].strides)))), ((double *)(&(*__Pyx_BufPtrCContig1d(__pyx_t_5numpy_double_t *, __pyx_pybuffernd_values.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_values.diminfo[0].strides)))), __pyx_t_10, __pyx_t_11);
                                                                                                                                                                                                                 ^

, что заставляет меня думать, что некоторые типы приведений могут быть неправильными.

Если кто-нибудь что-нибудь знает об этом, это будет очень признательно.

...