用 Python 做科学计算,但是被 Python 的运行速度所困扰。矩阵运算也很慢,想征求下大家的建议。有什么优化 Python 科学计算的方法么?
py科学计算用的不太多。也就是最近天天跑数据分析。我简单说自己的一些基本经验给比我还菜的新手,抛砖引玉
一:学会正确使用numpy scipy。 numpy scipy写好的绝不自己写,比如矩阵运算等操作,pylab的实现还算不错。各种函数都有,尽量使用他们可以避免初学者大部分的速度不足问题。因为这些函数大部分都是预编译好的。
根据我几年前的测试,python的矩阵运算速度并不慢,(因为你运行的是动态链接库里面的函数而不是脚本)比mathematica快,和matlab持平。
大部分新手不擅长看文档啥都自己造轮子是不好的。当然老手把效率写的比开源库高也不算啥新闻,毕竟有对特定程序的优化
二:减少for的使用,多使用向量化函数,np.vectorlize可以把函数变成对数组逐元素的操作,比for效率高几个华莱士。
三:对内存友好,操作大矩阵的时候减少会引起整矩阵对此copy的操作
四:系统最慢的大部分时候是io,包括上面说的内存操作和频繁的读入读出以及debug输出。避免他们,在需要实时处理的时候引入类似于gpu的pipeline管线机制或者使用灵活的多线程编程可以起到奇效。
五:matplotlib的绘图效率并不高明,在使用交互绘图(plt.ion)的时候减少不必要的刷新率。
六:程序对jit(运行前编译)友好,避免频繁的改动数据类型引起的繁杂类型推导(不过很少见科学计算程序有这个毛病)
七:要不然,干脆把python用cython之类的玩意编译了吧。。但在科学计算上我觉得这样做卵用不大。
科学计算最好应该还是使用gpu加速,但关于py如何使用cuda/opencl加速我不太懂。还望后面的朋友补充。一些基本的经验就这些,应该是入门者都懂了…
上一篇:python科学计算库的使用
下一篇:为什么Python适合科学计算?
一级建造师二级建造师消防工程师造价工程师土建职称房地产经纪人公路检测工程师建筑八大员注册建筑师二级造价师监理工程师咨询工程师房地产估价师 城乡规划师结构工程师岩土工程师安全工程师设备监理师环境影响评价土地登记代理公路造价师公路监理师化工工程师暖通工程师给排水工程师计量工程师
执业药师执业医师卫生资格考试卫生高级职称护士资格证初级护师主管护师住院医师临床执业医师临床助理医师中医执业医师中医助理医师中西医医师中西医助理口腔执业医师口腔助理医师公共卫生医师公卫助理医师实践技能内科主治医师外科主治医师中医内科主治儿科主治医师妇产科医师西药士/师中药士/师临床检验技师临床医学理论中医理论