由于Matlab运行效率问题和Python的胶水语言特性,笔者从这学期开始,由Matlab转到了Python环境。 虽然有众多的IDE和各式各样的开发环境,但是始终找不到像Matlab那样的Python开发环境。期间使用过Wing IDE, Canopy, PyCharm, Eclipse + PyDev, Sublime Text, Spyder等环境,但是都难以达到Matlab那种流畅使用的舒适感。其中Spyder是和Matlab最相近的开发环境,基本上也是仿造Matlab的样式进行开发的。但是,Spyder界面太难看,而且Debug非常不方便。 与此同时,PyCharm好看的界面,精确的提示,方便的Debug 功能驱使着我去探索。可惜的是PyCharm并不是专为科学计算开发的IDE,而是为WEB开发设计的。 网上也并没有关于如何将PyCharm改造成科学计算(机器学习)专用IDE的博客。在Google一整天之后,我决定自己动手改造PyCharm,这也是本文写作的目的。
python get-pip.py
安装pip工具。再运行 pip install ipython
安装jpython。Windows用户可能需要切换到Python安装位置下的bin目录才能运行上述命令。if __name__ == "__main__":
函数,然后单击菜单栏中的Edit –>> Macros –>> Start Macro Recording. 选中编辑器,Ctrl +A (或者 Command +A ) 全选, 鼠标右键菜单中单击 Execute Selection in Console, 再按下右方向键(取消全选状态)。 这个时候,宏就算录制完成了,点击Edit –>> Macros –>> Stop Macro Recording结束录制,并给宏取名Run_Scriptdef frameVarsToXML(frame_f_locals):
,这个函数就是对Variable Viewer的数据后端进行操作的函数。我们在type, typeName, resolver = getType(v)
之后加入一个判断语句,过滤掉多余的变量,我加入的判断语句如下:if name.startswith('_')
or typeName == 'module'
or typeName == 'ExitAutocall'
or typeName == 'function'
or name =='get_ipython'
or name =='In'
or name == 'Out':
return ''
当然也可以根据自己的需要,过滤掉其他变量。
6. 接下来,就是见证奇迹的时刻了。
。实验成功!!!
上述改造其实仅仅是第一步,也有很多不足。 比如Debug模式不能像Matlab一样,在同一个python进程中运行。 无法在普通模式下加入watch。 不过考虑到科学计算的难点主要在于数学公式的实现,而非工程性的代码结构,改造之后的PyCharm基本能够满足我平时编写科学计算的一般需求(执行文件,执行选中行,查看变量键值,实时交互,断点调试,编辑器高函数提醒,编辑器自动补全)。 高级的功能(同一进程调试,交互式命令补全)虽然暂时没有,但也可以通过PyCharm自带的功能进行补充,总的来说已经足够我实现PRML整本书的基础算法了。