2012-04-18 31 views
4
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") 

どのように私はアルマジロのマットからマットに変換できますか?'arma :: umat'から 'arma :: mat'への変換

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

はアルマジロはおそらく、あなたがあなた自身の変換関数を記述する必要がどちらのコンストラクタもoperator=

を使用してMat<double>mat)にMat<uword>umat)からの変換をサポートしていません

答えて

11

他の2つの回答は、まっすぐな変換が存在しないことを既に示唆しています。 Arma web siteconv_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

現在のドキュメントでは、** fn_conv_to.hpp **からの 'as_scalar'をお勧めします。' '//!(古いコードとの互換性のためにのみ使用し、MatのようなBaseオブジェクトの代わりにas_scalar()を使用してください)' " –

+0

ありがとう、感謝します! –

0

、ありがとうございます。

+0

'conv_to ::()'関数を使用してからアルマジロ_does_サポート転換。 –

0

このページによれば

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

matumatunsigned intの行列であるdoubleの行列です。彼らはお互いに変換することができないように見えます。

+1

これらは 'conv_to :: from()'を使って変換可能です。 –

関連する問題