Rcpp矩阵二值化

Rcpp matrix binarization

我在Rcpp上做了一个二值化函数:

NumericMatrix binarize_matrix(NumericMatrix m){
int ncol=m.ncol();
for(int i=0; i<ncol; i++){ 
for(int j=0;j<ncol;j++){ 
  if(m(j,i)>1) 
    m(j,i)=1; 
}
}
return m;
}

该功能运行良好。 但是,在 R 中,当我通过 M=m 创建两个矩阵(M 和 m)时。当我二值化一个时,另一个也被二值化。

为什么对象是依赖的?我该如何解决这个问题?

您正在制作对象的浅表副本。尝试以下代码并查看控制台输出。

M = data.frame(a=c(1,2))
m = M
tracemem(m)
tracemem(M)

m2 <- data.frame(M)
tracemem(m2)

输出如下所示:

> M = data.frame(a=c(1,2))
> m = M
> tracemem(m)
[1] "<0x6b9d028>"
> tracemem(M)
[1] "<0x6b9d028>"
> 
> m2 <- data.frame(M)
> tracemem(m2)
[1] "<0x6b9aea8>"

m2 对象在内存中的位置不同。希望这可以帮助!