zoukankan      html  css  js  c++  java
  • Python/Numpy大数据编程经验

    Python/Numpy大数据编程经验

    1.边处理边保存数据,不要处理完了一次性保存。不然程序跑了几小时甚至几天后挂了,就啥也没有了。即使部分结果不能实用,也可以分析程序流程的问题或者数据的特点。
     
    2. 及时用 del 释放大块内存。Python缺省是在变量范围(variablescope)之外才释放一个变量,哪怕这个变量在后面的代码没有再被用到,所以需要手动释放大的array。
       注意所有对数组的引用都del之后,数组才会被del。这些引用包括A[2:]这样的view,即使np.split也只是创建了view,没有真的把内存分到不同的array里。
     
    3. 矩阵点乘对角阵,用逐行乘可以快几十、几百倍:M.dot( diag(v) ) -> M*v。
     
    4. 尽量重用内存。比如
        sqrtW = np.sqrt(W)
        (W以后再没有用到了)
        这样多了分配sqrtW内存的时间
       可以改写成 
        np.sqrt(W,W) # in placesqrt
        sqrtW = W # take auser-friendly name as its reference
        类似的
        A = B + C # B is neverused later
       可以改写成 
        B += C; A = B
     
    4. 用 ipython 的 run -p prog.py 做profiling,找出耗时最多的语句。
       也可以实现简单的Timer类,打印出耗时流程使用的时间。
     
    5. 把实际代码高度简化,只留下使用相同大小的内存和相同多的运算的skeleton,来事先评估算法的时间和空间复杂度。而且可以分块评估。比如
        …… complex and slowroutine to compute V11, Wsum, Gwmean ......
           for i in xrange(noncore_size):
               wi = Wsum[ i ]
               VW = V11.T* wi
               VWV =VW.dot(V11)
               V21[ i] =np.linalg.inv(VWV).dot( VW.dot(Gwmean[ i]) )
      可以写个test.py,用 np.random.randn() 随机初始化 V11,Wsum, Gwmean,然后执行这个代码块,看出大致所需内存和每个循环的时间,避免了执行之前漫长的计算这些变量的时间。
     
    6.如果是windows,把windows自动安装更新的选项关掉。不然可能跑了一夜程序,收结果时一看,windows自动重启过了……哭
  • 相关阅读:
    Git 分布式版本控制的常见命令
    Redis数据库的学习及与python的交互
    Flask项目中数据库迁移的使用
    Flask项目中的蓝图简介及使用方式
    window环境下创建Flask项目需要安装常见模块命令
    Flask数据库常见关系模板代码
    Flask-WTF表单
    SCRF的简介及防护手段
    【题目】求n以内的素数个数
    【题目】英文字符进行频率的统计,直方图输出
  • 原文地址:https://www.cnblogs.com/yymn/p/4652336.html
Copyright © 2011-2022 走看看