【发布时间】:2018-10-23 20:26:56
【问题描述】:
在我的函数中,我想通过使用 == 来比较矩阵中的行,但它不起作用。
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
// [[Rcpp::export]]
double accept(arma::mat x){
int b=x.n_rows;
arma::vec B(b-1);B.zeros();
for(int i=0;i<b-1;i++){
arma::rowvec a1;arma::rowvec a2;
if(x.row(i)==x.row(i+1)){
B[i]=0;
}else{
B[i]=1;
}
}
double bb;bb=sum(B)/(b-1);
return(bb);
}
错误信息:
c:/Rtools/mingw_64/bin/g++ -std=gnu++11 -I"C:/Users/songxl/DOCUME~1/R/R-35~1.0RC/include" -DNDEBUG -I. ./inst/include -fopenmp -I"C:/Users/songxl/Documents/R/R-3.5.0rc/library/Rcpp/include" -I"C:/Users/songxl/Documents/R/R-3.5 .0rc/library/RcppArmadillo/include" -I"E:/adptive/block" -O2 -Wall -mtune=generic -c acp.cpp -o acp.o acp.cpp:在函数“双重接受(arma::mat)”中: acp.cpp:10:16: 错误: 无法转换 'arma::operator==(const T1&, const T2&) [with T1 = arma::subview_row; T2 = arma::subview_row;类型名 arma::enable_if2::result = const arma::mtGlue, arma::subview_row, arma::glue_rel_eq> ](((const arma::subview_row)(& arma::Mat::row(arma::uword) [with eT = double; arma::uword = unsigned int](((arma ::uword)(i + 1)))))' 来自 'arma::enable_if2, arma::subview_row, arma::glue_rel_eq> >::result {aka const arma::mtGlue, arma::subview_row, arma ::glue_rel_eq>}' 到 'bool' if(x.row(i)==x.row(i+1)){ ^ make: *** [acp.o] 错误 1
【问题讨论】:
-
什么不完全有效?你得到一个错误?出乎意料的结果?
-
是的,我认为问题出在“if(x.row(i)==x.row(i+1))”,但我无法解决
-
错误消息被截断,如果您向我们展示整个消息可能会有用。
-
不要使用
==,它会使用element wise comparison。要比较整个向量或矩阵并获得一个bool,请使用approx_equal()