《R高性能编程》notes(2)

chapter+6+减少内存使用的简单方法.png

注解:
修改时复制copy-on-modification:
即从已有对象创建新的对象有时并不需要占用额外内存

//检查对象大小
object.size() 
pryr包的object_size()
//查看对象所指内存块
pryr包的address()
//追踪对象复制方法
tracemem()

运行时计算值部分 实例 -- 层次聚类

//方法1:计算每对观察值的距离矩阵然后决定哪一对最近
A<-matrix(rnorm(1E5),1E4,10)
dist_mat<-as.matrix(dist(A))
diag(dist_mat)<-NA
res1<-which(dist_mat==min(dist_mat,na.rm=T),arr.ind=T)[1,]
object_size(A)
##800k
object_size(dist_mat)
##801MB
//距离矩阵需要成倍的内存空间存储所有观察对的距离

//方法二:可以逐对计算,需要内存少,但时间长
library(pdist)
temp_res<-lapply(1:nrow(A),function(x){
temp<-as.matrix(pdist(X=A,Y=A[x,]));
temp[x]<-NA;
output_val<-min(temp,na.rm=T);
output_ind<-c(x,which(temp==output_val));
output<-list(val=output_val,ind=output_ind);
})
val_vec<-sapply(temp_res,FUN=function(x) x$val)
ind_vec<-sapply(temp_res,FUN=function(x) x$ind)
res2<-ind_vec[,which.min(val_vec)]
object_size(temp_res)
##2.72MB
object_size(val_vec)
##80kB
object_size(ind_vec)
##80.2kB

(1)方法2在实际应用可以采用FNN包的knn();
(2)代码并行化:用parallel包的parLApply()代替lapply()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,419评论 11 349
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,638评论 25 709
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,274评论 30 472
  • 因为偏科严重,女孩博了最后一搏,还是没能考上县里的重点高中。 女孩家境不好。父母种地,收入微薄,爷爷奶奶年事已高需...
    风花星月阅读 1,285评论 7 19
  • 有时 我去客户家 仓库里都是货 不小心 就羡慕起地主家的 小仓鼠来 它们 也是传说中的 富几代 转过身 我又看见猫...
    莲籽阅读 210评论 0 0