繁体   English   中英

为什么这两个函数给出不同的结果?

[英]Why do the two functions give different results?

我使用RcppArmadillo包定义了两个函数并将它们保存到文件cxxFuns.cpp f01f02之间的唯一区别是V(0, 0)

#include <RcppArmadillo.h>
using namespace Rcpp;

// [[Rcpp::export]]
arma::mat f01 (arma::mat x) {
    unsigned int p0 = x.n_cols ;
    unsigned int iR = 0, iC = 0 ;
    arma::mat V(3, 3) ; V.fill(NA_REAL) ;
    for (iR = 0; iR < p0; iR++) { 
        V(0, 0) = arma::sum(x.col(iR) % x.col(iR)) ;
        for (iC = iR+1; iC < p0; iC++) {
            ;
        }
    }
    
    return V ;
}

// [[Rcpp::export]]
arma::mat f02 (arma::mat x) {
    unsigned int p0 = x.n_cols ;
    unsigned int iR = 0, iC = 0 ;
    arma::mat V(3, 3) ; V.fill(NA_REAL) ;
    for (iR = 0; iR < p0; iR++) { 
        for (iC = iR+1; iC < p0; iC++) {
            V(0, 0) = arma::sum(x.col(iR) % x.col(iR)) ;
        }
    }
    
    return V ;
}

据我了解,函数f01f02应该给出相同的结果。 但是,测试并未显示预期结果。

rm(list=ls())
set.seed(2020)
Rcpp::sourceCpp('cxxFuns.cpp')
x <- matrix(rnorm(100*10), 10)
(egg01 <- f01(x))
         [,1] [,2] [,3]
[1,] 12.78607   NA   NA
[2,]       NA   NA   NA
[3,]       NA   NA   NA

(egg02 <- f02(x))
         [,1] [,2] [,3]
[1,] 14.80855   NA   NA
[2,]       NA   NA   NA
[3,]       NA   NA   NA

发生了什么?

第一个块中的最后一次执行是在iR = p0-1

第二个块中的最后一次执行是在iC=p0-1
由于iCiR+1开始,您最后一次执行是针对iR=p0-2

在计算V(0,0)或在调试器下运行之前打印iR的值应该立即清楚这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM