本期采访嘉宾:张若愚(HyryStudio)
日本神户制钢综合研究所从事研究开发工作,研究方向为:嵌入式DSP信号处理系统开发,嵌入式MCU控制系统开发,工业控制软件开发,信号处理、数据处理以及生产系统的计算机模拟。
欢迎大家跟帖提问,我们对于跟帖提问的网友给予30积分的奖励。更多访谈请关注ChinaUnix访谈录:
http://star.chinaunix.net/ChinaUnix社区:
张先生您好!很高兴您能够接受ChinaUnix的采访,能够给大家简单地介绍一下?
HyryStudio:
我2000年到日本留学,2004年硕士毕业之后一直在神户制钢的综合研究所从事研究开发工作。工作内容主要有DSP和MCU的嵌入式开发,工业控 制软件开发,以及一些信号处理、控制方面的内容。在工作中我逐渐使用Python解决各种问题,目前Python已经是我最主要的开发语言。
ChinaUnix社区:
在好多技术开发人员眼中,Python可能只是一个脚本语言,现在大量的Python框架的流行,让Python有了向企业 级应用架构进军的机会,但是从您的图书的题目中我们能够看到,Python其实也是科学计算中的一个好手,能够简单地介绍一下Pytho科学计算的历史及 现在的应用前景么?
HyryStudio:
正如 Eric Jones 为《Python科学计算》所作的序中提到的,Python自从诞生以来就一直和科学计算有着十分密切的联系。前期的许多Python研讨会都是在美国的各个研究机构举办的。Python 1.0诞生于1994年,而目前Python科学计算最核心的扩展库 NumPy 的前身Numeric在1995年就已发布。当时网络应用还未发展起来,Python可能更多的是运用于系统管理脚本以及一些计算任务。在2005年左右 NumPy将当时的两个数组处理扩展库Numeric和Numarray进行合并统一,成为Python科学计算最核心的扩展库。在NumPy基础之上,
发展出了很多Python专用的科学计算扩展库,而许多开源函数库也提供了Python的绑定,例如OpenCV、VTK,这些扩展库也通常会使用 NumPy的数组和Python交换数据。
目前Python在科学计算界的应用已经十分广泛。从2008年开始每年都举办了Python科学计算方面的会议,从中我们可以看到Python在各个领域的运用。而在今年的 PyCon2012 中,科学计算方面的内容更是占据了相当大的部分。
实际上许多工程师、科学家并非专职的程序员,他们需要一种简单易学、功能强大而且免费开源的开发环境帮助他们解决工作中遇到的实际问题。 Python以及其众多的扩展库就构成了这样一个生态环境。他们可以编写简单的脚本做一些快速的数据处理,或者编写功能完整的计算、仿真应用程序,还可以 将现有的C、Fortran函数库包装成Python的扩展库。每位技术人员都能从Python的生态环境受益。
ChinaUnix社区:
其实我们也能够看到,开源软件在科学等领域有很深远的影响,比如在科学计算、生物信息学等方面,都有非常有名的开源软件,能够简单地和我们介绍一些在科学计算方面Python社区有哪些比较有名的项目或者函数库么?
HyryStudio:
Python一直保持着很强的实用主义,它通常不会去试着重新开发一整套函数库,而是将现有的开源函数库包装成其扩展库。而Python则通过这些扩展库将众多的开源函数库连接在一起,是名符其实的胶水语言。例如由华盛顿大学的教授主导开发的 Sage ,就是一套以代替MATLAB、Mathematica、Maple等商用科学计算软件为目的的开源系统。它通过Python结合了众多的开源科学计算软件,并通过网页浏览器提供了一个与其交互的记事本文档界面。
Python的科学计算扩展库非常多,不同专业的技术人员都可以找到适合自己的扩展库。下面是我经常会用到的一个非常不完全的列表:
• NumPy + SciPy + matplotlib + IPython : 这几个应该是每位开发者都应具备的扩展库。NumPy提供了多维数组以及众多的处理函数,SciPy提供了各种数值运算功能,matplotlib能绘制 出精美的二维图表,IPython则提供了一个超强的命令行,最新版的IPython还添加于Sage类似的浏览器的记事本界面(notebook)。
• SciKits : 其中包括许多独立的扩展库,作为SciPy的补充。其中 scikit-learn 是一套机器学习库,包含了比较完善的文档以及众多的实例程序。
• Pandas : 以Python世界中 R 的替代品为目标的数据分析库。根据其官方网站的测试,Pandas在许多方面的性能都比R要高。
• ETS : 这是一套Enthought公司开发的函数库,其中的 Mayavi 能很方便地对数据进行三维可视化。
• OpenCV : 这是一套计算机视觉库,目前的最新版本已经提供了十分完备的Python接口,能够调用OpenCV中众多的图像处理、模式识别函数直接对NumPy数组进行处理。
ChinaUnix社区:
因为科学计算的特殊性,能够简单介绍一下Python在这个领域有哪些优势以及应用的场景,这个语言本身将来会有哪些进步呢?
HyryStudio:
大多数工程师、科学家使用科学计算软件的目的都是为了快速解决其工作中遇到的问题,而不是开发出一套完整的软件。这就是为什么MATLAB这样的商 用科学计算软件十分流行的原因。而Python在这一点上实际上和MATLAB十分相似,我们也可以使用Python众多的扩展库快速写出一次性的数据处 理、运算的脚本。然而由于Python语言的一些高级特性,以及众多的科学计算之外的扩展库,我们可以将积累下来的一次性脚本进行改造,为它们提供命令行、GUI、 数据库、网络等众多接口,最终成为一套完整的工具包或者实用的计算软件。而且由于是开源的自由软件,我们可以在任何系统中安装Python环境,运行我们
的程序。我工作中所接触的所有计算机以及家中的电脑中都安装了Python环境,随时有了一个想法都可以立即打开电脑实现试试看,这对于需要授权的商用软 件来说是无法想象的。
目前Python正处在2.x版本和3.x版本并存的时代,3.x将2.x中一些不合理、过时的设计剔除掉,为将来更好的发展打下良好的基础。然而 3.x并不兼容2.x,因此许多扩展库需要进行不小的改动。Python社区目前的当务之急是将众多的扩展库迁移到3.x版本之上。在科学 计算领域,NumPy已经移植成功。这为其它依赖于NumPy的扩展库铺设了一条光明之路。
一直以来,开发者们对Python的执行效率颇有微词,因此Python科学计算方面的社区在未来或许会更致力于运行效率方面。目前较为实际的解决方案是用编译型语言编写核心计算函数,然后对其进行包装,让Python调用。而 Cython 则可以将Python程序转换成C语言程序,并且可以通过一些特殊的编译型语言的语法,将程序的运行速度提升到C语言级别。此外另起炉灶的 PyPy 则通过JIT编译,提高Python程序的运行速度。根据目前的测试,平均能提速5倍,而对于纯数值的运算提升数十倍也是可能的。现在PyPy社区正致力于NumPy的移植工作,一旦移植成功,Python科学计算就又多了一种选择。
ChinaUnix社区:
能够谈谈目前的工作么,国内外的科研院所的工作氛围相比,有何区别?以及大家对开源软件的看法和对软件版权的态度和意思。
HyryStudio:
我的工作内容比较繁杂,但是大多数都会使用到Python,我曾写过一篇博文专门介绍 Python如何帮助我高效完成工作 。
我不了解国内的研究所的情况,而日本的研究所也就仅能就我所知做一些介绍。首先日本的许多专门从事软件开发的公司都比较保守,很多新开发的系统仍然 会使用10多年前的开发工具,例如VB 6.0、VC 6.0。一些大公司的商用项目还会使用.net 2.0或是Java 1.4这样N年前的平台。
我所在的研究室并非专门从事软件开发,专门写程序的只有我一个人。同事们通常会使用Excel做数据处理,一些较复杂的东西会用MATLAB做。但 是由于MATLAB十分昂贵,因此整个20多人的研究室只有2台电脑安装了MATLAB,作为MATLAB专用机器,在日本的公司里是绝对不能用未授权的 软件的。
如上所述,这种环境很不适合研究开发工作。这样他们也会自己寻找一些开源软件作为替代,例如 Scilab 。我所在的研究所的工作环境在日本来说还是比较宽松的,能够比较自由地选择软件。我在5年前左右开始大量使用Python进行开发,并且取得了很好的效 果。经过这些年的积累,同事们也对Python的能力有所了解了。最近我们已经开始定期举行Python学习会,在研究室内部推广Python的使用。因 此一款开源软件要获得大家的认可需要较长的周期和一些实际的成果。
ChinaUnix社区:
国内相关的开源相关的科学技术的图书也不是很多,能够谈谈原因么?
HyryStudio:
国内科学计算软件方面的书籍大都是介绍MATLAB的(其实日本也差不多)。这一方面和我国的软件版权环境有关,另一方面MATLAB这样的商用软 件更加会做市场推广工作,例如为大学提供廉价的MATLAB,以及十分详尽的文档。而开源软件的开发者多半将精力放在软件开发上,因此入门文档、手册以及 市场推广方面都与商用软件有较大的差距。这就需要我们这些开源软件的受益者多做宣传和推广工作。只要能做到文档丰富、对初学者友好,我想开源软件会更加有 市场的。