Cython / Armadillo错误:scipy.sparse.csc_matrix转换为SpMat

时间:2019-02-21 16:45:25

标签: scipy cython sparse-matrix armadillo

我目前正在将Armadillo库包装在Cython中,并遇到一些麻烦,无法通过Cython将Python中的scipy.sparse.csc_matrix转换为Armadillo的稀疏矩阵类。

这样做的功能实际上是这样的:

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);
                                                                                                                                                                                                                 ^

这使我认为某些类型转换可能不正确。

如果任何人对它一无所知,将不胜感激。

0 个答案:

没有答案