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 对象在内存中的位置不同。希望这可以帮助!
我在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 对象在内存中的位置不同。希望这可以帮助!