为什么Python是人工智能技术首选的编程语言?原因1:Python是一种说人话的语言所谓"说人话",是指这种语言:开发者不需要关注底层语法简单直观表达形式一致我们先来看几个代码的例子:C 语言Hello World 代码:int main(){ printf("Hello, World!"); return 0;}Java 语言Hello World 代码:public class HelloWorld { public static void main(String[] args){ System.out.println("Hello World!"); }}Python 语言Hello World代码:print("Hello World!")仅仅是一个Hello World程序,就能看出区别了,是不是?编译 VS 解释当然,仅仅是一个Hello World的话,C和Java的代码也多不了几行。可是不要忘了,C和Java的代码要运行,都必须先经过编译的环节。对于C语言来说,在不同的操作系统上使用什么样的编译器,也是一个需要斟酌的问题。一旦代码被copy到新的机器,运行环境和之前不同,还需要重新编译,而那台机器上有没有编译器还是一个问题,安装上编译器后,也许和之前最初的编译器有所区别,还得修改源代码来满足编译环境的需求……我到底做错了什么?我只是想运行一个别人写的程序而已。而Python则不用编译,直接运行。而且都可以不用写文件,一条条语句可以直接作为命令行运行,真的太方便了。语言语法和Python比,Java的语法更"啰嗦"。从上面的例子已经可以看出,创建一个链表,Java还需要声明和逐个插入节点,而Python则可一行代码完成从链表创建到插入节点及赋值的全部操作。Java非让你很别扭地写好几行,Python直接一句搞定。这样的结果就是,Python写起来省事,读起来也方便。可读性远超Java。表达风格在10年或者更久远之前,Python经常被用来和Perl相提并论。毕竟在那个时候,C是系统级语言,Java是面向对象语言,而Python & Perl则是脚本语言的双子星。Python和Perl在设计层面有一个非常大的区别:Python力求让不同的人在撰写同样功能实现的代码时,所用的表达形式尽量一致;而Perl则是故意追求表达的千姿百态,让同一个人在不同地方写同样功能时所用具体形式都不同。从哲学层面讲,Perl的追求更加自由主义,更利于释放人类的多样化天性。然而,Perl写的程序——那叫一个乱七八糟!如果不是想成为代码诗人,或者语言大师,只是想用尽量简单直接的方法,把事情做了,首选语言确实是Python。原因2:强大的AI支持库矩阵运算NumPy由数据科学家Travis Oliphant创作,支持维度数组与矩阵运算。结合Python内置的math和random库,堪称AI数据神器!有了它们,就可以放心大胆玩矩阵了!大家知道,不管是Machine Learning,还是Deep Learning,模型、算法、网络结构都可以用现成的,但数据是要自己负责I/O并传递给算法的。而各种算法,实际上处理的都是矩阵和向量。使用NumPy,矩阵的转置、求逆、求和、叉乘、点乘……都可以轻松地用一行代码搞定,行、列可以轻易抽取,矩阵分解也不过是几行代码的问题。而且,NumPy在实现层对矩阵运算做了大量的并行化处理,通过数学运算的精巧,而不是让用户自己写多线程程序,来提升程序效率。有了Python这种:语法简洁明了、风格统一;不需要关注底层实现;连矩阵元素都可以像在纸上写公式一样;写完公式还能自动计算出结果的编程语言,开发者就可以把工作重心放在模型和算法上了。
1)Python是解释语言,写程序较方便对于想要做机器学习的人来说,最重要的莫过于写程序方便了,它对模型的修改操作较多,然而Python可以在短时间内完成,解释语言有天生的优势,不需要编译时间,这对机器学习这种需要大量prototyping和迭代的研究方向是非常有益工作效率的。2)Python的开发生态成熟,可以使用的库也很多Python灵活的语法也使文本操作、list/dict等非常实用的功能高效实现,配合lamdba等使用更是方便,这也是Python良性生态背后的一大原因,对比来说,Lua虽说也是解释语言,但很难做到Python这样,原因一是因为Python现如今已经占领了大部分市场,原因二在于它本身种种反常识的设计,比如全局变量。3)Python效率超高解释语言的发展已然超过了很多人的想象,比如像list comprehension的语法都是贴近内核实现的,除了JIT之外,还有Cython可以大幅增加运行效率,最后得益于Python对C的接口,很多像gnumpy、theano这样搞笑、Python接口友好的库可以加速程序的运行,在强大团队的支撑下,这些库的效率可能比一个不熟练的程序员用C写一个月调试的效率还要高。