Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Rcpp(和RcppArmadillo)中,如何检查vec是否包含复数?_C++_R_Vector_Rcpp_Armadillo - Fatal编程技术网

C++ 在Rcpp(和RcppArmadillo)中,如何检查vec是否包含复数?

C++ 在Rcpp(和RcppArmadillo)中,如何检查vec是否包含复数?,c++,r,vector,rcpp,armadillo,C++,R,Vector,Rcpp,Armadillo,在R中,我们可以使用is.complex(例如,is.complex(vec1))检查向量(例如,vec1=c(1+1i,2))是否包含复数。我想知道RcppArmadillo中的等价函数是什么 如何在RcpParadillo中提取向量中每个元素的实部,如R中的Re(vec1)为了提取实部和虚部,可以使用arma::real()和arma::imag()函数。或者,您可以使用sugar函数Rcpp::Re()和Rcpp::Im(): /[[Rcpp::depends(RcppArmadillo)

在R中,我们可以使用is.complex(例如,
is.complex(vec1)
)检查向量(例如,
vec1=c(1+1i,2)
)是否包含复数。我想知道RcppArmadillo中的等价函数是什么


如何在RcpParadillo中提取向量中每个元素的实部,如R中的
Re(vec1)
为了提取实部和虚部,可以使用
arma::real()
arma::imag()
函数。或者,您可以使用sugar函数
Rcpp::Re()
Rcpp::Im()

/[[Rcpp::depends(RcppArmadillo)]]
#包括
//[[Rcpp::导出]]
arma::vec getRe(arma::cx_vec x){
返回arma::实(x);
}
//[[Rcpp::导出]]
Rcpp::NumericVector getIm(Rcpp::ComplexVector x){
返回Rcpp::Im(x);
}
/***R
种子(42)
N[1,]-0.9390771-0.04167943 0.8294135-0.4393582-0.3140354
Re(vec)
#> [1] -0.93907708 -0.04167943  0.82941349 -0.43935820 -0.31403543
getIm(vec)
#> [1] -2.1290236  2.5069224 -1.1273128  0.1660827  0.5767232
Im(vec)
#> [1] -2.1290236  2.5069224 -1.1273128  0.1660827  0.5767232
*/
如果您使用上面的
getRe(arma::vec x)
,您将得到:

Warning message:
In getRe(vec) : imaginary parts discarded in coercion
你不能把复数放在一个不打算存储它们的对象中。这是C++是一种强类型语言的结果。因此,不需要模拟
is.complex()


请参阅以获取更多参考。

要提取实部和虚部,可以使用
arma::real()
arma::imag()
函数。或者,您可以使用sugar函数
Rcpp::Re()
Rcpp::Im()

/[[Rcpp::depends(RcppArmadillo)]]
#包括
//[[Rcpp::导出]]
arma::vec getRe(arma::cx_vec x){
返回arma::实(x);
}
//[[Rcpp::导出]]
Rcpp::NumericVector getIm(Rcpp::ComplexVector x){
返回Rcpp::Im(x);
}
/***R
种子(42)
N[1,]-0.9390771-0.04167943 0.8294135-0.4393582-0.3140354
Re(vec)
#> [1] -0.93907708 -0.04167943  0.82941349 -0.43935820 -0.31403543
getIm(vec)
#> [1] -2.1290236  2.5069224 -1.1273128  0.1660827  0.5767232
Im(vec)
#> [1] -2.1290236  2.5069224 -1.1273128  0.1660827  0.5767232
*/
如果您使用上面的
getRe(arma::vec x)
,您将得到:

Warning message:
In getRe(vec) : imaginary parts discarded in coercion
你不能把复数放在一个不打算存储它们的对象中。这是C++是一种强类型语言的结果。因此,不需要模拟
is.complex()


请参阅以获取进一步参考。

键确实位于倒数第二段:您不需要,因为它是stronly类型化语言。键确实位于倒数第二段:您不需要,因为它是stronly类型化语言。