zoukankan      html  css  js  c++  java
  • R语言高性能编程(二)

    接着上一篇

    一、减少内存使用的简单方法
    1、重用对象而不多占用内存 y <- x 是指新变量y指向包含X的那个内存块,只有当y被修改时才会复制到新的内存块,
    一般来说只要向量没有被其他对象引用,就可以正常修改,以避免复制向量带来的CPU和RAM开销。按照程序属于来说,R是按值传递,
    应该避免使用sort 类似的函数,会返回一个副本,资源开销至少和原对象一样大,甚至更大
    2、删除不在需要的中间数据
    注意 在调用rm()的时候,内存不会被立即释放并交还到操作系统,而是在必要的时候,或者当已删除对象的内存量超过阈值的时候,
    由R的垃圾回收器自动释放内存
    3、运行时计算值而不是永久性存储值
    4、交换活跃数据和非活跃数据 将一些数据保存到磁盘,saveRDSP readRDS

    二、使用有限内存处理大型数据集
    1、使用节约内存的数据结构
    R存储数据结构的方式? 对所有数据类型来说,向量是最基本的结构单元,提供了多种原子向量类型(logic,integer,numeric,complex,character,raw)
    很多其他数据结构都可以从这些向量类型构建,R内部存储结构的本质就是向量
    2、稀疏矩阵 包含大量的零值或者空值 sparse参数
    3、对称矩阵 dspmatrix
    4、比特向量 R中的逻辑值占4个字节或32个比特位,而比特向量仅用一个比特位存储每个逻辑值。减少32倍,但是不适合存储NA值(bit包)
    5、使用内存映射文件并以块的形式处理数据 数据不管怎么优化 大到放不进内存中的时候 就需要以memory -mapped file 的形式存储到磁盘
    分块计算 ,然后合并结构,是否容易实现 取决于算法本身
    bigmemory big.matrix 支持很多R矩阵上的操作 支持big.matrix对象的cran包 biganalytics  bigtabulate
    ff 和 ffbase 已做过简单的数据测试 本机16G 内存 I7700的U  可支持2亿数据量的 分块计算 是一个很考验算法的难题

    --------------------截止到这里 我们已经学习了串行R代码的各种优化,下面介绍利用CPU多核 并行计算

    未完待续.....

  • 相关阅读:
    Thinking in java Chapter10 内部类
    策略设计模式 Strategy模式
    Thinking in java Chapter9 接口
    Thinking in java Chapter8 多态
    Thinking in java Chapter7 复用类
    mock服务
    文件的使用方式
    字符编码与文件处理方式
    各容器类型及内置方法
    python各数据类型及内置方式:
  • 原文地址:https://www.cnblogs.com/qiaoyihang/p/7852950.html
Copyright © 2011-2022 走看看