R 矩阵二值化
我在Rcpp上做了一个二值化函数:R 矩阵二值化,r,matrix,rcpp,R,Matrix,Rcpp,我在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; } numerimatrix二值化_矩阵(numerimatrix m){ int ncol=m.ncol();
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;
}
numerimatrix二值化_矩阵(numerimatrix m){
int ncol=m.ncol();
对于(inti=0;i您正在创建对象的浅层副本。请尝试以下代码并查看控制台输出
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
轨迹(m)
轨迹(M)
m2 M=数据帧(a=c(1,2))
>m=m
>轨迹(m)
[1] ""
>轨迹(M)
[1] ""
>
>m2轨迹(m2)
[1] ""
m2对象在内存中有不同的位置。希望这有帮助!正确!Rcpp通过代理对象使用浅拷贝。使用Rcpp::NumericMatrix m2=Rcpp::clone(m);
并分配给m2
,如果你想m
不变。为什么要麻烦Rcpp?m[]
> 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>"