开启辅助访问
 找回密码
 立即注册

为什么人工智能用 Python?

yahoooo 回答数20 浏览数244149
Python 作为脚本语言,运行速度没有 Java、C++ 快。 Python 到底有什么优势?
使用道具 举报
| 未知
LANLAN88 | 未知
这属于一种误解,人工智能的核心算法是完全依赖于C/C++的,因为是计算密集型,需要非常精细的优化,还需要GPU、专用硬件之类的接口,这些都只有C/C++能做到。所以某种意义上其实C/C++才是人工智能领域最重要的语言。
Python是这些库的API binding,使用Python是因为CPython的胶水语言特性,要开发一个其他语言到C/C++的跨语言接口,Python是最容易的,比其他语言的ffi门槛要低不少,尤其是使用Cython的时候。其他语言的ffi许多都只能导入C的函数入口点,复杂的数据结构大多只能手工用byte数组拼起来,如果还需要回调函数输入那就无计可施了。而CPython的C API是双向融合的,可以直接对外暴露封装过的Python对象,还可以允许用户通过继承这些自定义对象来引入新特性,甚至可以从C代码当中再调用Python的函数(当然,也有一定的条件限制)。不过这也是PyPy这样的JIT解释器的一个障碍。
而且Python历史上也一直都是科学计算和数据分析的重要工具,有numpy这样的底子,因为行业近似所以选择API binding语言的时候会首选Python,同时复用numpy这样的基础库既减少了开发工作量,也方便从业人员上手。
回复
使用道具 举报
CHRED | 未知
因为脚本语言写起来简单容易。
Python虽然慢但是它只是调用AI接口,真正的计算全是C/C++写好的底层,用Python只是写逻辑,即第一步怎么算,第二步怎么算,几行代码就出来了。
换成C++,得先学1个月才能编译通过。不是说用C++写不了上层逻辑,而是代码量太大,开发效率太低,换来总体速度提升1%,不合适。
计算机语言各有适用性,即C/C++速度快适合底层写算法,Python慢但适合上层写逻辑。两者各自牛逼的特点恰好是对方傻逼的特点。
回复
使用道具 举报
nHNqGUtj | 未知
这个答案没有吹捧 Python 的意思,其主要内容是介绍一段历史和一些学科常识。平心静气的说,想看干货的可以去读期刊,开发文档,上面应该有足够多的公式和术语。利益不相关,不是 Python 开发者。
Peter Norvig 在他的博客里 http://norvig.com/python-lisp.html 解释了为什么使用 Python 。一开始他打算把自己书中的 Lisp 代码翻译成 Java,因为他的学生们对 Java 比较熟悉,看到 Lisp 的括号就头大如斗。但他们最后放弃了,因为 Java 太啰嗦了,书里的一小段伪代码需要一大段的 Java 代码来表示,伪代码 和 Java 代码的差异太大了,即使它们表现的是同一个想法。最终 Peter Norvig 找了一种和 伪代码 很相似的程序语言,那就是 Python 。


显然,当我们的目的是想要传达想法,方便教学的话,一种便于理解的语言是最好的。首先我们会用 自然语言 ,但是它不够形式化,有太多歧义。其次我们会想到 伪代码(pseudocode),可惜它又不能执行,无法立即验证正确性。所以在这样的场景下,Python 是比较适用的。


或者这些科学家们真的没有时间去纠结指针,虚函数,构造函数的初始化顺序这类问题,因为这些问题连对付它们的专家 —— 工程师有时都会犯糊涂。此外,性能理论上只受程序的数学模型的影响,而实际上要比这复杂的多。比如性能还会受到数据规模,硬件因素等等影响。 很显然,同样的算法用 Python 实现和用 C/C++ 实现,大概率是 C/C++ 快,但这种比较对计算机科学家来说没什么意义,因为它们的算法复杂度,比如说,都是 O(nlogn) 。从这个角度看,Python 起到的作用和数学公式是一样的,你不能说 C/C++ 的性能比 伪代码 好,因为 伪代码 不是用来执行的。


当然,回到实际问题,回到公司的项目,如果性能成为瓶颈,再由工程师们用 Java 或者 C/C++ 重写就好了。


PS: 虽然这里我们把 计算机科学家 和 工程师 区别看待,不过在历史上,很多计算机科学家也是一流的工程师,这已无需赘述。
回复
使用道具 举报
klaf | 未知
容易学,代码可读性高。

Python入门时间按天算的,

C++入门时间按年算的,

对于编程只是副业的AI科学家们来说,显然没那么多时间去学C++。
回复
使用道具 举报
yaoyuting7 | 未知
就拿Tensorflow举例子吧,Tensorflow的后端,也就是进行运算的模块,是用C/C++写的,速度很快;而Python作为前端的工具,是用来描述计算图的,在编译完计算图之后剩下的部分就交给高效的后端了。
打个比方,Python在机器学习领域的用处,就像是计算机的的键盘鼠标,而这些机器学习库的后端则像是计算机的CPU;用键盘鼠标来做运算当然是不现实的,但是用键盘鼠标把算式输入给计算机,让计算机来运算,岂不再正常不过?
那你说描绘计算图这种小事情,为什么不用最方便省时的工具呢,对吧?
回复
使用道具 举报
hybrid_halogen | 未知
运行速度可以通过堆硬件来提升
开发速度却不能通过堆人手来提升
对于目前人工智能的应用来说,能快速开发比能快速执行更有用。
关于这点,可以看下《黑客与画家》这本书。虽然书里说的是Lisp而非Python,但关于开发效率和运行效率的取舍逻辑是相似。而Python显然又比Lisp人性化多了。
回复
使用道具 举报
名牌软件 | 未知
Python最大的优点,就是
    语法上不恶心;半天就能学会而且用好,节省了学习成本;别的语言100行的内容用Python写只要10行,节省了开发成本。
看上去很简单,然而主流语言除了Python没有其他选项能做到这一点(不恶心不代表没有坑,但其他语言不仅坑比Python多,其他地方还比Python恶心一百倍以上)。
所以Python是绝大部分人用起来最舒服的语言。
至于为什么Python上生态这么好,从Web到数据库到机器学习到图像处理到工业自动化,这么多人用它,基本都是因为“Python用起来舒服”这个原因。
回复
使用道具 举报
xbaOOVMu | 未知
Python是 做 MVP(最小可行性产品)的最好搭档
回复
使用道具 举报
zaizai89 | 未知
一个语言的发展啊,还是要考虑历史的进程的。
Python 有三个非常重要的特性,易上手,社区丰富,性能扩展方便
易上手。
这个很容易理解了,Python 算是目前对于新手最为友好的语言了,你基本直接随意找一个 Tutorial 走一遍基本就能上手了。
而且 Python 作为一种解释性语言,人机交互方面,天生比 C++/Scala 这种编译型语言要人类有好的多。快速验证一个模型什么的,出个 图什么的,都很方便。
社区丰富:
Python 目前周边算是非常成熟,针对不同的需求都有着自己比较受欢迎的库什么的
比如临时写个 web 接口什么的
pallets/flaskgithub.comdjango/djangogithub.com比如觉得自带的 REPL 不太好用的
jupyter/jupytergithub.comjupyter/notebookgithub.com想要快速出个图什么的
https://github.com/plotly/plotly.pygithub.compyecharts/pyechartsgithub.com配合前面的易上手的特性,模型人员在快速验证想法,迭代 prototype 的时候,可以很方便的按需选择,而不必去考虑太多关于工程上的细节。
性能扩展方便
CPython 一直保持的一点就是,在你觉得某些地方存在性能瓶颈的时候,可以很方便的用其余语言进行扩展
pandas-dev/pandasgithub.comnumpy/numpygithub.comtensorflow/tensorflowgithub.com比如这些常见的一大堆东西,模式都是 C/C++ 底层性能部分,Python wrap 之后暴露给使用者。

所以你看到没,Python 其实啥都能干,啥都能干的不错,所以某种意义上来讲 Python 在国内这两年的火爆,某种意义上算是一种对现实妥协。


同时,因为现在从业人员来源复杂,各个专业的都有,像数学,统计,经济学等等各行各业的朋友都试图在这波浪潮里分一碗羹。就目前来看Python 这样啥都能干,啥都能干的还行的特性,的确是对降低编程门槛,加快迭代效率而言有着不错的利好。
有什么坏处么?当然有啊
各路培训班纷纷打出了“人工智能时代,不会 Python ,等于文盲”的口号,让大家总有一种学会 Python = 学会人工智能的感觉,于是一大堆人蜂拥而来23333,这副场景怎么看都充斥着一股浓浓的韭菜味。
回复
使用道具 举报
123下一页
快速回复
您需要登录后才可以回帖 登录 | 立即注册

当贝投影