python+人工智能,学习人工智能的课程占多少?

2020-07-10 15:56发布

1条回答
007
2楼 · 2020-07-15 22:36




本文探讨了Python语言在AI领域的优势与运用。




谁会成为AI和大数据时代的第一开发语言?


这本已是一个不需要争论的问题。如果说三年前,Matlab、Scala、R、Java和Python还各有机会,局面尚且不清楚,那么三年之后,趋势已经非常明确了,特别是前两天Facebook开源了PyTorch之后,Python作为AI时代头牌语言的位置基本确立,未来的悬念仅仅是谁能坐稳第二把交椅。


不过声音市场上还有一些杂音。最近一个有意学习数据科学的姑娘跟我说,她的一个朋友建议她从Java入手,因为Hadoop等大数据基础设施是用Java写的。


无独有偶,上个月IBMdeveloperWorks发表的一篇个人博客(https://www.ibm.com/developerworks/community/blogs/jfp/entry/What_Language_Is_Best_For_Machine_Learning_And_Data_Science?lang=en),用职位招聘网站indeed上的数据做了一个统计。


这篇文章本身算得上是客观公正,实事求是,但传到国内来,就被一些评论者曲解了本意,说

Python的优势地位尚未确立,鹿死谁手尚未可知,各位学习者不可盲目跟风啊,千万要多方押宝,继续撒胡椒面不要停。


在这里我要明确表个态,对于希望加入到AI和大数据行业的开发人员来说,把鸡蛋放在Python这个篮子里不但是安全的,而且是必须的。


或者换个方式说,如果你将来想在这个行业混,什么都不用想,先闭着眼睛把Python学会了。


当然,Python不是没有它的问题和短处,你可以也应该有另外一种甚至几种语言与Python形成搭配,但是Python将坐稳数据分析和AI第一语言的位置,这一点毫无疑问。


我甚至认为,由于Python坐稳了这个位置,由于这个行业未来需要大批的从业者,更由于Python正在迅速成为全球大中小学编程入门课程的首选教学语言,这种开源动态脚本语言非常有机会在不久的将来成为第一种真正意义上的编程世界语。


讨论编程语言的优劣兴衰一直被认为是一个口水战话题,被资深人士所不屑。但是我认为这次Python的上位是一件大事。


请设想一下,如果十五年之后,所有40岁以下的知识工作者,无分中外,从医生到建筑工程师,从办公室秘书到电影导演,从作曲家到销售,都能使用同一种编程语言进行基本的数据处理,调用云上的人工智能API,操纵智能机器人,进而相互沟通想法,那么这一普遍编程的协作网络,其意义将远远超越任何编程语言之争。目前看来,Python最有希望担任这个角色。


Python的胜出令人意外,因为它缺点很明显。


它语法上自成一派,让很多老手感到不习惯;“裸”Python的速度很慢,在不同的任务上比C语言大约慢数十倍到数千倍不等;由于全局解释器锁(GIL)的限制,单个Python程序无法在多核上并发执行;Python2和Python3两个版本长期并行,很多模块需要同时维护两个不同的版本,给开发者选择带来了很多不必要的混乱和麻烦;由于不受任何一家公司的控制,一直以来也没有一个技术巨头肯死挺Python。


所以,相对于Python的应用之广泛,其核心基础设施所得到的投入和支持其实是非常薄弱的。




直到今天,26岁的Python都还没有一个官方标配的JIT编译器,相比之下,Java语言在其发布之后头三年内就获得了标配JIT。


另一个事情更能够说明问题。Python的GIL核心代码1992年由该语言创造者GuidovanRossum编写,此后十八年时间没有一个人对这段至关重要的代码改动过一个字节。


十八年!直到2010年,AntoinePitrou才对GIL进行了近二十年来的第一次改进,而且还仅在Python3.x版本中使用。这也就是说,今天使用Python2.7的大多数开发者,他们所写的每一段程序仍然被26年前的一段代码牢牢制约着。


说到Python的不足,我就想起发生在自己身上的一段小小的轶事。我多年前曾经在一篇文章里声明自己看好Python,而不看好Ruby。


大概两年多以前,有一个网友在微博里找到我,对我大加责备,说因为当年读了我这篇文章,误听谗言,鬼迷心窍,一直专攻Python,而始终对Ruby敬而远之。


结果他Python固然精通,但最近一学Ruby,如此美好,如此甜蜜,喜不自胜,反过来愤然意识到,当年完全被我误导了,在最美的年华错过了最美的编程语言。


我当时没有更多的与他争辩,也不知道他今天是否已经从Python后端、大数据分析、机器学习和AI工程师成功转型为Rails快速开发高手。我只是觉得,想要真正认识一件事物的价值,确实也不是一件容易的事情。


Python就是这样一个带着各种毛病冲到第一方阵的赛车手,但即便到了几年前,也没有多少人相信它有机会摘取桂冠,很多人认为Java的位置不可动摇,还有人说一切程序都将用JavaScript重写。


但今天我们再看,Python已经是数据分析和AI的第一语言,网络攻防的第一黑客语言,正在成为编程入门教学的第一语言,云计算系统管理第一语言。


Python也早就成为Web开发、游戏脚本、计算机视觉、物联网管理和机器人开发的主流语言之一,随着Python用户可以预期的增长,它还有机会在多个领域里登顶。


而且不要忘了,未来绝大多数的Python用户并不是专业的程序员,而是今天还在使用Excel、PowePoint、SAS、Matlab和视频编辑器的那些人。


就拿AI来说,我们首先要问一下,AI的主力人群在哪里?如果我们今天静态的来谈这个话题,你可能会认为AI的主力是研究机构里的AI科学家、拥有博士学位的机器学习专家和算法专家。


但上次我提到李开复的“AI红利三段论”明确告诉我们,只要稍微把眼光放长远一点,往后看三至五年,你会看到整个AI产业的从业人口将逐渐形成一个巨大的金字塔结构,上述的AI科学家仅仅是顶端的那么一点点,95%甚至更多的AI技术人员,都将是AI工程师、应用工程师和AI工具用户。


我相信这些人几乎都将被Python一网打尽,成为Python阵营的庞大后备军。


这些潜在的Python用户至今仍然在技术圈子之外,但随着AI应用的发展,数百万之众的教师、公司职员、工程师、翻译、编辑、医生、销售、管理者和公务员将裹挟着各自领域中的行业知识和数据资源,涌入Python和AI大潮之中,深刻的改变整个IT,或者说DT(数据科技)产业的整体格局和面貌。


为什么Python能够后来居上呢?


如果泛泛而论,我很可以列举Python的一些优点,比如语言设计简洁优雅,对程序员友好,开发效率高。但我认为这不是根本原因,因为其他一些语言在这方面表现得并不差。


还有人认为Python的优势在于资源丰富,拥有坚实的数值算法、图标和数据处理基础设施,建立了非常良好的生态环境,吸引了大批科学家以及各领域的专家使用,从而把雪球越滚越大。


但我觉得这是倒因为果。为什么偏偏是Python能够吸引人们使用,建立起这么好的基础设施呢?为什么世界上最好的语言PHP里头就没有numpy、NLTK、sk-learn、pandas和PyTorch这样级别的库呢?为什么JavaScript极度繁荣之后就搞得各种程序库层次不齐,一地鸡毛,而Python的各种程序库既繁荣又有序,能够保持较高水准呢?


我认为最根本的原因只有一点:Python是众多主流语言中唯一一个战略定位明确,而且始终坚持原有战略定位不动摇的语言。相比之下,太多的语言不断的用战术上无原则的勤奋去侵蚀和模糊自己的战略定位,最终只能等而下之。


Python的战略定位是什么?其实很简单,就是要做一种简单、易用但专业、严谨的通用组合语言,或者叫胶水语言,让普通人也能够很容易的入门,把各种基本程序元件拼装在一起,协调运作。


正是因为坚持这个定位,Python始终把语言本身的优美一致放在奇技妙招前面,始终把开发者效率放在CPU效率前面,始终把横向扩张能力放在纵向深潜能力之前。长期坚持这些战略选择,为Python带来了其他语言望尘莫及的丰富生态。


比如说,任何一个人,只要愿意学习,可以在几天的时间里学会Python基础部分,然后干很多很多事情,这种投入产出比可能是其他任何语言都无法相比的。


再比如说,正是由于Python语言本身慢,所以大家在开发被频繁使用的核心程序库时,大量使用C语言跟它配合,结果用Python开发的真实程序跑起来非常快,因为很有可能超过80%的时间系统执行的代码是C写的。


相反,如果Python不服气,非要在速度上较劲,那么结果很可能是裸速提高个几倍,但这样就没人有动力为它开发C模块了,最后的速度远不如混合模式,而且很可能语言因此会变得更复杂,结果是一个又慢又丑陋的语言。


更重要的是,Python的包装能力、可组合性、可嵌入性都很好,可以把各种复杂性包装在Python模块里,暴露出漂亮的接口。


很多时候,一个程序库本身是用C/C++写的,但你会发现,直接使用C或者C++去调用那个程序库,从环境配置到接口调用,都非常麻烦,反而隔着一层,用其python包装库更加清爽整洁,又快又漂亮。这些特点到了AI领域中,就成了Python的强大优势。


Python也借助AI和数据科学,攀爬到了编程语言生态链的顶级位置。Python与AI绑在一起,对它们来说,无论是电子商务、搜索引擎、社交网络还是智能硬件,未来都只是生态链下游的数据奶牛、电子神经和执行工具,都将听命于自己。




对编程语言发展历史缺乏了解的人可能会觉得,Python的战略定位是犬儒主义和缺乏进取心的。但事实证明,能同时做到简单而严谨、易用而专业,是很难的,而能够坚守胶水语言的定位,更是难上加难。


有的语言,从一开始就是出于学术而非实用的目的,学习曲线过于陡峭,一般人很难接近。


有的语言,过于依赖背后金主的商业支持,好的时候风光无限,一旦被打入冷宫,连生存下去都成问题。


有的语言,设计的时候有明确的假想场景,要么是为了解决大规模并发,要么是为了解决矩阵运算,要么是为了做网页渲染模板,一旦离开这个场景,就各种不爽。


更多的语言,刚刚取得一点成功,就迫不及待的想成为全能冠军,在各个方向上拼命的伸展触角,特别是在增强表达能力和提升性能方面经常过分积极,不惜将核心语言改得面目全非,最后变成谁都无法掌控的庞然大物。


相比之下,Python是现代编程语言设计和演化当中的一个成功典范。


Python之所以在战略定位上如此清晰,战略坚持上如此坚定,归根结底是因为其社区构建了一个堪称典范的决策和治理机制。


这个机制以GuidovanRossum(BDFL,Pythoners都知道这是什么意思),DavidBeazley,RaymondHettinger等人为核心,以PEP为组织平台,民主而有序,集中而开明。只要这个机制本身得以维系,Python在可见的未来里仍将一路平稳上行。


最有可能向Python发起挑战的,当然是Java。Java的用户存量大,它本身也是一种战略定位清晰而且非常坚定的语言。


但我并不认为Java有很大的机会,因为它本质上是为构造大型复杂系统而设计的。什么是大型复杂系统?就是由人清清楚楚描述和构造出来的系统,其规模和复杂性是外生的,或者说外界赋予的。


而AI的本质是一个自学习、自组织的系统,其规模和复杂性是一个数学模型在数据的喂养下自己长出来的,是内生的。


因此,Java大多数的语言结构对于大数据的处理和AI系统的开发显得使不上劲,你强的东西这里用不上,这里需要的东西你做起来又别扭。


而Python在数据处理方面的简洁强悍早就尽人皆知。对比两个功能相同的Java和Python机器学习程序,正常人只要看两眼就能做出判断,一定是Python程序更加清爽痛快。


大概在2003或者2004年的时候,我买过一本Python的书,作者是一位巴西人。他说自己之所以坚定的选择Python,是因为他小时候经常梦到未来世界将由一条大蟒蛇(蟒蛇的英文为python)统治。


我当时觉得这哥们好可怜,做个梦都能梦到这么恐怖的场景。但今天来看,也许他只是像黑客帝国里的程序员安德森一样,不小心穿越到未来,并且窥探到了世界的真相。


相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,'\n'是换行,'\t'是tab,'\\'是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open('3_2.txt','r')linecount=len(file.readlines())linecache.getline('3_2.txt',linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问