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自动重启过了……哭
  • 相关阅读:
    js添加获取删除cookie
    华为Scan Kit二维码扫描
    Android中使用抖动动画吸引来用户注意-属性动画
    material_dialogs 动画弹框
    flutter 通过widget自定义toast,提示信息
    flutter 通过用户信息配置路由拦截 shared_preferences
    fluterr shared_preferences 存储用户信息 MissingPluginException(No implementation found for method getAll on channel
    Android Scroller及实际使用
    Antd Tree简单使用
    iOS开发--runtime常用API
  • 原文地址:https://www.cnblogs.com/yymn/p/4652336.html
Copyright © 2011-2022 走看看