从'arma :: umat'转换为'arma :: mat'

时间:2012-04-18 15:03:47

标签: c++ matrix rcpp armadillo

code <- '
arma::mat M=Rcpp::as<arma::mat>(m);
arma::umat a=trans(M)>M;
arma::mat N=a;
    return Rcpp::wrap(N);
'
coxFunc <- cxxfunction(signature(m="matrix"),
                       code,
                       plugin="RcppArmadillo")

如何在Armadillo上从umat转换为mat?

file53a97e398eed.cpp:33: error: conversion from ‘arma::umat’ to non-scalar type ‘arma::mat’ requested
make: *** [file53a97e398eed.o] Error 1

谢谢,

3 个答案:

答案 0 :(得分:11)

其他两个答案已经暗示不存在直接转换。在Arma web site上花一分钟建议您在此处使用conv_to<T>::from(var)功能:

R> code <- '
+   arma::mat  M = Rcpp::as<arma::mat>(m);
+   arma::umat a = trans(M) > M;
+   arma::mat  N = arma::conv_to<arma::mat>::from(a);
+   return Rcpp::wrap(N);
+ '
R> coxFunc <- cxxfunction(signature(m="matrix"),
+                        code,
+                        plugin="RcppArmadillo")
R> coxFunc( matrix(1:9, 3, 3) )
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    1    0    0
[3,]    1    1    0
R> 

答案 1 :(得分:0)

Armadillo不支持使用构造函数和Mat<uword>

umatMat<double>)到matoperator=)的转换

也许您必须编写自己的转换函数。

答案 2 :(得分:0)

根据这个页面

http://arma.sourceforge.net/docs.html#Mat

matdouble的矩阵,而umatunsigned int的矩阵。似乎他们不能相互转换。