6
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

ありがとうございました、

4

3 に答える 3

12

他の 2 つの回答は、直接的な変換が存在しないことを既に示唆しています。Arma のWeb サイトで、必要な機能を提案して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> 
于 2012-04-18T23:23:29.647 に答える
0

Armadillo は、コンストラクターも使用しない( ) からMat<uword>( umat) への変換もサポートしていません。Mat<double>matoperator=

おそらく、独自の変換関数を作成する必要があります。

于 2012-04-18T15:39:03.760 に答える
0

このページによると

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

amatは の行列ですがdoubleumatは の行列ですunsigned int。それらは相互に変換できないようです。

于 2012-04-18T15:40:28.393 に答える