版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人工智能与机器学习简介你心目中的人工智能是什么?什么是人工智能?Artificialintelligence(AI,alsomachineintelligence,MI)isintelligencedisplayedbymachines,incontrastwiththenaturalintelligence(NI)displayedbyhumansandotheranimals.---fromWikepedia什么是人工智能?计算机科学家:“智能体”是任何可以感知其环境,并采取能最大化其目标实现可能性的动作的设备。管理科学家:能正确地解释外部数据,从这些数据中学习,并利用所学,通过灵活的适应,来达到特定的目标和任务的能力。Colloquially,theterm"artificialintelligence"isappliedwhenamachinemimics"cognitive"functionsthathumansassociatewithotherhumanminds,suchas"learning"and"problemsolving".人工智能学科人工智能学科是研究人类智能活动的规律,构造具有一定智能的人工系统,研究如何应用计算机的软硬件来模拟人类某些智能行为的基本理论、方法和技术的学科。人工智能学科通常被视为计算机科学的一个分支,但它涉及到计算机科学、神经科学、心理学、认知学、哲学和语言学等各种自然科学和社会科学的学科,其范围已远远超出了计算机科学的范畴。人工智能简史(~1956)公元前4至前1世纪,亚里士多德,“如果机器在接受命令或是有了意识后能够完成其职责,那么统治者就不再需要奴隶了。”(Politics,1253.6,35)人工智能简史(~1956)人脑的思考或推理过程可以机械化古希腊哲学家亚里士多德(前384-322)给出了形式逻辑的基本规律。德国数学家和哲学家莱布尼兹(1646-1716)提出了关于数理逻辑的思想,把形式逻辑符号化,从而能对人的思维进行运算和推理。英国数学家和逻辑学家布尔(1815-1864)实现了莱布尼兹的思维符号化和数学化的思想,提出了一种崭新的代数系统---布尔代数。1900年德国数学家希尔伯特的问题;1936年图灵提出图灵机模型可以模拟任何机械的形式化算法。1946年第一台电子计算机诞生。人工智能简史(~1956)1950,图灵发表论文《ComputingMachineryandIntelligence》,提出了一个标准:如果一台机器通过了“图灵测试”,则我们必须接受这台机器具有智能。如果有30%的人类测试者在5分钟之内无法分辨出被测试对象,则认为通过了图灵测试。黄金时代(1956-1974)1956年,麦卡锡和明斯基组织了达特茅斯会议,第一次提出“人工智能”。纽厄尔和西蒙展示了他们的程序:“逻辑理论家”可以独立证明出《数学原理》第二章的38条定理;到了1963年,该程序已能证明该章的全部52条定理。萨缪尔研制了一个跳棋程序,该程序具有自学习功能,可以从比赛中不断总结经验提高棋艺。1959年,该跳棋程序打败了它的设计者萨缪尔本人。三年后,该程序已经可以击败一个美国州跳棋冠军了。1956年,塞弗里奇研制出第一个字符识别程序,开辟了模式识别这一新的领域。黄金时代(1956-1974)1965年,西蒙:“二十年之内,机器就可以做人能做的任何事情。”1967年,明斯基:“一代之内…创造‘人工智能’的问题就会被基本解决。”第一个人工智能冬天(1974-1980)过度的乐观抬高了整个社会对人工智能的期许。机器定理证明领域遇到了瓶颈,计算机推了数十万步也无法证明两个连续函数之和仍是连续函数。萨缪尔的跳棋程序也没那么神气了,它停留在州冠军的层次,无法进一步战胜世界冠军。1974年,人工智能的发展进入第一个冬天。第一个人工智能冬天(1974-1980)知识就是力量。费根鲍姆,传统的人工智能之所以会陷入僵局,就是因为他们过于强调通用求解方法的作用,而忽略了具体的知识。1968年,第一个成功的专家系统DENDRAL问世,它可以根据质谱仪的数据和核磁谐振的数据,以及有关化学知识推断有机化合物的分子结构。1972年又研制了诊断和治疗细菌感染性血液病的专家咨询系统MYCIN。1977年第五届国际人工智能大会上,费根鲍姆系统阐述了专家系统的思想,并提出了知识工程的概念。繁荣时期(1980-1987)知识库系统和知识工程成为80年代人工智能研究的主要方向。1980年,卡内基梅隆大学为数字设备公司设计了一套名为XCON的“专家系统”。这套具有完整专业知识和经验的计算机智能系统,在1986年之前能为公司每年节省四千多美元。1981年,日本经济产业省拨款八亿五千万美元支持第五代计算机项目。其目标是造出能够与人对话,翻译语言,解释图像,并且像人一样推理的机器。受到日本的刺激,其他国家纷纷制定了相应的计划。第二个人工智能冬天(1987-1993)随着专家系统应用的不断深入,知识获取成为其进一步发展的主要瓶颈。1982年,物理学家JohnHopfield证明了一种新型的神经网络(现被称为“Hopfield网络”)能够用一种全新的方式学习和处理信息。GeoffreyHinton和DavidRumelhart推广了反向传播算法。20世纪80年代末,一些研究者提倡一种基于机器人的全新人工智能方法。他们认为,要展示真正的智能,机器需要有一个身体来感知外部世界并与之交互。这些感觉运动技能对产生更高层次的技能如常识推理是必不可少的,提倡“自下而上”地建设智能。第二个人工智能冬天(1987-1993)因为整体上解决智能问题存在巨大的困难,所以在模仿大脑功能的研究上,出现了符号主义;在模仿大脑结构的研究上,出现了连接主义;在模仿人类行为的研究上(反馈机制),出现了行为主义。符号学派,认为人工智能源于数理逻辑,试图通过形式化的符号表示和逻辑推理系统来描述智能行为。代表性成果为最早期的自动定理证明,后来又发展了启发式搜索、专家系统和知识工程的理论与技术。连接学派,认为人工智能源于仿生学,试图通过仿真大脑神经网络的活动来实现智能。擅长解决模式识别、聚类、联想等非结构化的问题,但却很难解决高层次的智能问题(如机器定理证明)。行为学派,认为人工智能源于控制论。认为智能是在与环境的交互过程中表现出来的,即感知-动作,无需知识表示,无需推理。代表作首推RodneyBrooks设计的六足行走机器人,一个基于感知-动作模式模拟昆虫行为的控制系统。平稳发展期(1993-2010)人们对于为什么人工智能未能实现人类智能的梦想的原因没有达成一致意见,从而大分裂:自动定理证明模式识别机器学习自然语言理解计算机视觉自动程序设计1997年5月,IBM的深蓝(DeepBlue)战胜国际象棋世界冠军卡斯帕罗夫2011年2月,IBM的沃森(Waston)在电视节目“Jeopardy!”中战胜两个优秀的人类冠军选手人工智能简史(2010-)大数据和更快更强的计算机硬件大规模知识库/知识图谱深度学习图像分类语音识别同声传译下围棋精准医疗……深度学习引领了连接主义的复兴,同时,以强化学习为代表的行为主义也在兴起。以深度学习和强化学习为代表的第三次人工智能浪潮。.tw/2016/07/whats-difference-artificial-intelligence-machine-learning-deep-learning-ai/什么是机器学习?[Machinelearningisthe]fieldofstudythatgivescomputerstheabilitytolearnwithoutbeingexplicitlyprogrammed.---ArthurSamuel,1959AcomputerprogramissaidtolearnfromexperienceEwithrespecttosometaskTandsomeperformancemeasureP,ifitsperformanceonT,asmeasuredbyP,improveswithexperienceE.---TomMitchell,1997机器学习无处不在垃圾邮件过滤网页搜索商品推荐欺诈检测电影推荐医疗助手网络广告社交网络语音识别……什么是机器学习?“Hi”“Howareyou”“Goodbye”你说“Hello”大量的音频数据你编写的学习程序学习......“monkey”“cat”“dog”什么是机器学习?这是“cat”大量的图片你编写的学习程序学习......机器学习≈寻找一个函数语音识别:图像识别:下围棋:人机对话:“Cat”“Howareyou”“5-5”“Hello”“Hi”(用户说)(系统回应)(下一步落子)学习框架
一组函数“cat”“dog”“monkey”“snake”模型“cat”图像识别:学习框架
一组函数“cat”图像识别:模型训练数据函数的优度Better!“monkey”“cat”“dog”函数输入:函数输出:学习框架
一组函数“cat”图像识别:模型训练数据函数的优度“monkey”“cat”“dog”挑选最优的函数
应用“cat”训练
测试第一步第二步第三步第一步:定义一组函数第二步:评价函数的优度第三步:选择最优函数机器学习很容易……就好像把大象放进冰箱……有监督学习回归线性模型结构化学习半监督学习迁移学习无监督学习强化学习分类深度学习SVM,决策树,K-NN
…非线性模型场景方法任务学习导图学习理论学习导图回归
f今天上午PM2.5昨天上午PM2.5…….明天上午PM2.5(标量)9/01上午PM2.5=639/02上午PM2.5=659/03上午PM2.5=100训练数据:9/12上午PM2.5=309/13上午PM2.5=259/14上午PM2.5=20输入:输入:输出:输出:預測PM2.5学习导图回归分类分类二分类多分类函数f函数f输入输入“Yes”或“No”类别1,类别2,…,
类别N二分类垃圾邮件过滤函数Yes/NoYesNo训练数据多分类函数政治體育經濟體育政治財經训练数据文档分类学习导图回归线性模型分类深度学习非线性模型分类–深度学习图像识别函数“monkey”“cat”“dog”“monkey”“cat”“dog”训练数据每个可能的类别层次结构分类–深度学习下围棋函数(19x19类)下一步每个位置是一个类别一堆棋谱训练数据黑:
5之五白:天元黑:五之5Input:黑:
5之五
Output:天元Input:黑:
5之五、白:天元Output:五之5学习导图有监督学习回归线性模型半监督学习分类深度学习SVM,决策树,K-NN
…非线性模型训练数据:函数的输入输出对函数输出=类别标签很难收集到大量的标注数据半监督学习标注数据无标注数据catdog(猫和狗的图像)例如,识别猫和狗:学习导图有监督学习回归线性模型结构化学习半监督学习迁移学习分类深度学习SVM,决策树,K-NN
…非线性模型迁移学习标注数据catdog和被训练任务无关的数据(标注的或未标注的)elephantHaruhi例如,识别猫和狗:学习导图有监督学习回归线性模型结构化学习半监督学习迁移学习无监督学习分类深度学习SVM,决策树,K-NN
…非线性模型无监督学习文档聚类:将一大堆文档自动分成几组,相关的文档聚成一组。无监督学习画点什么吧!学习导图有监督学习回归线性模型结构化学习半监督学习迁移学习无监督学习分类深度学习SVM,决策树,K-NN
…非线性模型结构化学习“机器学习”“大家好,欢迎大家來选修机器学习”“MachineLearning”f语音识别f机器翻译長門春日實玖瑠人脸识别学习导图有监督学习回归线性模型结构化学习半监督学习迁移学习无监督学习分类深度学习SVM,决策树,K-NN
…非线性模型强化学习监督学习和强化学习监督学习
强化学习Hello
Agent……Agent…….…….……Bad“Hello”说“Hi”“Byebye”说“Goodbye”跟老师学从评价中学监督学习和强化学习监督学习:强化学习:下一步:“5-5”下一步:“3-3”第一步……许多步……Win!AlphaGo是监督学习+强化学习有监督学习回归线性模型结构化学习半监督学习迁移学习无监督学习强化学习分类深度学习SVM,决策树,K-NN
…非线性模型场景方法任务学习导图学习理论课后练习请在实际生活中找出以下各类问题(各两例):回归二分类多分类聚类Python编程简介王秋月中国人民大学信息学院目录Python起源为什么要学习Python?怎样高效学习Python?Python的开发环境JupyterNotebookPython基本编程数据类型和变量运算符和表达式容器类型控制流语句函数文件操作Python起源1989年末,GuidovanRossum为了打发圣诞节的无聊,创造了Python语言。2005年12月,入职Google工作。2012年12月,加入Dropbox公司。GuidovanRossum(1956-)TOBIEIndexIEEEtopprogramminglanguagesof2019Python特点丰富的库简单、易学可扩展、可嵌入解释性面向对象、高层免费开源、可移植为什么要学Python?人生苦短,我用Python!Python的特点简单、易学一种代表简单主义思想的语言,有简单的语法,容易上手。伪代码本质是它最大的优点之一。使你能够专注于解决问题而不是去搞明白语言本身。面向对象的高层语言无需关注底层细节,而C/C++中需要操作指针。与其他语言相比,以强大而又简单的方式实现面向对象编程。解释性不需要被编译成二进制代码,可以直接在源代码上运行。对于编译性语言(C/C++),源文件->编译/链接器->可执行文件。Python的特点免费开源,可移植性Unix衍生系统,Win32系统家族,掌上平台(掌上电脑/手机),游戏控制台(PSP)等等。可扩展性,可嵌入性如果一段关键代码希望运行得更快或者希望算法不公开,你可以把这部分程序用C或C++编写,然后在Python程序中使用。可以把Python嵌入到C/C++程序中,从而向程序用户提供脚本功能。丰富的库Python标准库确实很庞大,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器等等。此外还有其他高质量的库,如wxPython、Twisted和图像库等等。如何高效学习Python?不需要具有计算机专业的学位不需要上一门完整的Python编程课不需要记住所有的语法自顶向下学习法:先学习核心的编程概念再学习使用一些相关的库最后通过实际项目来运用知识和改进技术Python2还是Python3?Python3不向下兼容Python2,即Python2中的一些函数和包不能在Python3中使用2010年发布的Python2.7是Python2最后的版本,Python2将不再更新2020年1月1日起,Python核心开发团队将不再对Python2提供任何官方支持Python3是未来的主流本课程中使用Python3Python的开发环境Anaconda一个用于科学计算的Python发行版提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题支持Linux,MacOS,Windows系统下载:/distribution/Anaconda里的其他包NumPy(/):用于处理(大)数组Pandas(/):数据分析工具包Matplotlib():用于绘制图表SciPy():包含许多有用的科学函数Scikit-learn(/):机器学习算法IPython(/):基于Shell或浏览器的开发环境Spyder(/):交互式集成开发环境此前被称为IPythonNotebook多语分析环境—支持40多种编程语言Jupyter是Julia,Python和R几个词的变位词支持多种内容类型:代码、描述文本、图像、视频等等/JupyterNotebookHTML&
MarkdownLaTeX(公式)Code(代码)JupyterNotebookHTML&
MarkdownLaTeX(公式)Code(代码)JupyterNotebookHTML&
MarkdownLaTeX(公式)Code(代码)JupyterNotebookHTML&
MarkdownLaTeX(公式)Code(代码)JupyterNotebook代码被划分成多个单元,可以控制执行过程允许进行交互式开发非常适合探索式分析与建模JupyterNotebook%matplotlibinline将图表显示在Jupyternotebook中Jupyter魔术命令%matplotlibinline将图表显示在Jupyternotebook中Jupyter魔术命令%matplotlibinline将图表显示在Jupyternotebook中%%timeit记录一个单元的执行时间Jupyter魔术命令Jupyter魔术命令%matplotlibinline将图表显示在Jupyternotebook中%%timeit记录一个单元的执行时间%runfilename.ipynb运行另一个notebook或python文件的代码Jupyter魔术命令%matplotlibinline将图表显示在Jupyternotebook中%%timeit记录一个单元的执行时间%runfilename.ipynb运行另一个notebook或python文件的代码%loadfilename.py将外部文件的内容拷贝粘贴到单元中importcaffeSolverName="/root/workspace“sovler=caffe.AdamSolver(SolverName)test.pyJupyter快捷键可以通过Help→KeyboardShortcuts查看所有的快捷键从命令行转换:>>>jupyternbconvert--to
python
notebook.ipynb从Notebook导出代码:抽取Python代码JupyterNotebook参考资料Jupyter官网:/JupyterNotebook快速入门:/article/getting-started-with-jupyter-notebook-part-1//article/getting-started-with-jupyter-notebook-part-2/Markdown语法说明:/markdown/Python基本语法一个语句占一行单个语句占多行,用反斜杠\多个语句在一行,使用分号;分隔Python使用缩进表示代码块,而不是一对花括号{}注释:单行注释用#多行注释用三个单引号'''
或者三个双引号"""
将注释括起来HelloWorld!print函数:print(“HelloWorld!”)数据类型(1)基本数据类型:数字(number)整数(int):2,59,100,-3小数(float):0.4,5.0,-0.78布尔(bool):True,False字符串(str):”Howareyou?”,’thisisastring.’数据类型(2)容器类型:列表(list):[1,2,5,10]元组(tuple):(1,‘two’)集合(set):{‘Mike’,‘John’,‘Marry’}字典(dictionary):{‘20120010’:98,‘20120011’:89,‘20120023’:100}变量变量在被赋值的时候创建,无需声明变量可以在任何时候被重新赋值为任何其他类型的值message=“HelloWorld!”print(message)message=“HelloPythonCourse!”print(message)type(message)message=3.6print(“Python“,message)type(message)message=100print(“Thereare“,message,“cars”)type(message)a,b,c,d=20,5.5,True,4+3jprint(type(a),type(b),type(c),type(d))变量命名规则变量名只能包含字母、数字和下划线。变量名只能以字母或下划线开头。变量名是大小写敏感的。变量名不要使用Python的关键字或函数名下面哪些变量名是不合法的:currentbalance,current_balance,currentBalance,current-balance,4account,account4,_spam,_Spam,print,‘hello’算术表达式基本的算术运算符:+、-、*、/、//、%、**5+4#加法4.3-2#减法3*7#乘法2/4#除法,得到浮点数2//4#除法,得到整数17%3#取余2**5#乘方x=3print(type(x))#Prints"<class'int'>"print(x)print(x+1)print(x-1)print(x*2)print(x**2)x+=1print(x)x*=2print(x)y=2.5print(type(y))#Prints"<class'float'>"print(y,y+1,y*2,y**2)布尔表达式‘True’和‘False’为预定义值;实际上是整数1和0比较运算符:<、<=、>、>=、==、!=,结果是布尔值布尔运算符:not、and、or12<1312>1312<=1212!=13True*120and1(3+2)<(5-7)(7==6)and(12!=21)t=Truef=Falseprint(type(t))#Prints"<class'bool'>"print(tandf)#LogicalAND;print(torf)#LogicalOR;print(nott)#LogicalNOT;print(t!=f)#LogicalXOR;字符串字符串用单引号'或双引号"括起来使用反斜杠\转义特殊字符:\n换行符,\t制表符,……三引号用于大块的文本内容a='Helloworld!'b="Helloworld!"a==ba="Per'slecture"print(a)a="Oneline.\nAnotherline."print(a)b="""Oneline,anotherline."""print(b)字符串运算86#字符串拼接a="Part1"b="andpart2"a+''+b#字符串重复并拼接s=a*2print(s)#提取子串s[0]print(s[0:4])print(s[5:])print(s[6:-1])#字符串长度len(s)#子串检测'p'ins'P'ins'Part'ins字符串不能改变87#直接修改字符串会报错s[0]='B'#构建新字符串s='B'+s[1:]Python中的字符串不可修改!hello='hello'world="world“#字符串格式化hw12='%s%s%d'%(hello,world,12)print(hw12)如果要改变一个字符串:用旧的字符串片段生成一个新的如果要生成许多新串,尝试字符串格式化列表(List)处理能让字符串处理更为有效字符串的方法88s='astring,withstuff's.count('st')#有多少子串?s.find(‘stu’)#寻找子串,如果有,给出子串的位置s.replace('stuff','characters')#替换子串(全部出现过的子串)s.replace('s','X',1)#只替换一次s='3's.isdigit()#是纯数字串吗?字符串有一组内建(built-in)方法没有方法可以改变原串,有几个方法可以生成新串s="hello"print(s.capitalize())#首字母大写;输出"Hello"print(s.upper())#所有字符转换成大写字符;输出"HELLO"print(s.rjust(7))#右对齐,左端补空格;输出"hello"print(s.center(7))#居中对齐,左右两端补空格;输出"hello"print(‘world’.strip())#去除前后的所有空白符;输出"world"列表89r=[1,2.0,3,5]#列表实例,不同的值type(r)#输出<class'list'>r[1]#通过下标来访问;偏移量为0r[-1]#负的下标代表从尾部开始计数r[1:3]#列表的片段;给出新的列表w=r+[10,19]#合并列表;给出另外的一个列表wr#原列表不变;w和r不同t=[0.0]*10#用重复生成一个初始向量t有序的对象序列异质的;可以包含任意类型的对象的混合列表操作90r=[1,2.0,3,5]r[3]=‘word’#通过下标改变一个元素(项)r#显示[1,2.0,3,'word']r[0]=[9,8]#列表可以嵌套r#显示[[9,8],2.0,3,'word']r[0:3]=[1,2,5,6]#改变列表的一个片段,可以改变列表的长度r#显示[1,2,5,6,‘word’]r[1:3]=[]#通过设置列表的片段为空集来移除元素r#显示[1,6,'word']len(r)#列表的长度,即项的个数,显示36inr#成员测试,显示Truer.index(6)#搜索并给出位置,如果没有的话,报错,这里显示1列表是可变的,可以改变局部列表的方法(1)91r=[1,2.0,3,5]r.append(‘thing’)#在列表尾增加一个项r#显示[1,2.0,3,5,'thing’]r.append([‘another’,‘list’])#增加的列表被看作一个单一项r#显示[1,2.0,3,5,'thing',['another','list']]r=[1,2.0,3,5]r.extend([‘item’,‘another’])#列表的项逐次添加r#显示[1,2.0,3,5,'item','another']k=r.pop()#移除最后一项k#显示'another’r#显示[1,2.0,3,5,'item’]r.insert(3,4.0)#在指定位置插入一项r#显示[1,2.0,3,4.0,5,'item’]r.remove(‘item’)#删除一项r#显示[1,2.0,3,4.0,5]列表的方法(2)92r=[2,5,-1,0,20]r.sort()r#显示[-1,0,2,5,20]w=['apa','1','2','1234']w.sort()#字符串:使用ASCII顺序w#显示['1','1234','2','apa']w.reverse()#反转列表!w#显示['apa','2','1234',‘1’]v=w[:]#首先生成新表v.reverse()#反转这份拷贝v#显示['1','1234','2','apa’]w#显示['apa','2','1234','1']使用内建的sort方法:排序是内部进行的,不产生新列表!外部函数sorted,不改变原列表的顺序/java276582434/article/details/90812971转换字符串为列表93s='biovitrum'#生成字符串w=list(s)#转为字符的列表w#显示['b','i','o','v','i','t','r','u','m’]w.reverse()w#显示['m','u','r','t','i','v','o','i','b’]r=''.join(w)#使用空串的join方法r#显示'murtivoib’d='-'.join(w)#使用字符-的join方法d#显示'm-u-r-t-i-v-o-i-b‘s='afewwords'w=s.split()#基于空白符(空格,新行)切分w#显示['a','few','words’]‘|’.join(w)#对其他串用方法‘join‘,显示'a|few|words'元组94t=(1,3,2)t[1]#由下标访问,偏移量从0开始,显示3(a,b,c)=t#元组赋值a#显示1b#显示3a,b,c#一个实际上的元组表达式!显示(1,3,2)a,b=b,a#交换值的技巧a,b#显示(3,1)r=list(t)#转换元组为列表r#显示[1,3,2]tuple(r)#转换列表为元组,显示(1,3,2)和列表一样,除了不可变,即一旦生成,就不可改变某些函数会返回元组集合95student={'Tom','Jim','Mary','Tom','Jack','Rose'}print(student)#输出集合,重复元素被自动去掉{'Mary','Jim','Rose','Jack','Tom’}
print('Rose'instudent)#成员测试True
a=set('abracadabra')#字符串转换成集合b=set('alacazam')print(a){'b','a','c','r','d’}print(a-b)#a和b的差集{'b','d','r'}
print(a|b)#a和b的并集{'l','r','a','c','z','m','b','d'}
print(a&b)#a和b的交集{'a','c'}
print(a^b)#a和b中不同时存在的元素{'l','r','z','m','b','d'}一个无序的没有重复元素的序列基本功能是进行成员关系测试和删除重复元素,可以进行集合运算字典96h={'key':12,'nyckel':'word'}h[‘key’]#由键访问,显示12h.has_key(‘nyckel’)#显示Trueh['Per']='Kraulis'h{'nyckel':'word','Per':'Kraulis','key':12}#输出顺序是随机的键(key)值(value)对的无序集合键必须使用不可变类型。可以用数字、字符串或元组,不能用列表在同一个字典中,键必须是唯一的,值不必增加一个键/值替换一个键对应的值h[‘Per’]=‘Johansson’h{'nyckel':'word','Per':'Johansson','key':12}字典的方法(1)97h={'key':12,'nyckel':'word'}‘Per’inh#测试一个键是否在字典中,显示Falseh[‘Per’]#报错len(h)#字典中键值对的个数,显示2h.keys()#字典中所有的键['nyckel','key']h.values()#字典中所有的值['word',12]h.items()#字典中所有的键值对dict_items([('key',12),('nyckel','word')])h.get(‘Per’,‘unknown’)#返回值,或者返回缺省值,显示'unknown’h.get(‘key’,‘unknown’)#显示12删除数据的命令:del98a='thing'#定义一个变量a#显示'thing’dela#把这个变量忘掉a#报错h={'key':12,'nyckel':'word'}delh['key']#移除键和它的值h#显示{'nyckel':'word'}r=[1,3,2]delr[1]#另一个删除列表项的方式r#[1,2]命令!不是函数!实际上移除变量(名字),不是对象字典方法(2)99g=h.copy()#拷贝字典delh['key’]h#显示{'nyckel':'word’}g#显示{'nyckel':'word','key':12}h['Per']='Johansson’h#显示{'nyckel':'word','Per':'Johansson’}h.update(g)#根据g添加或者更新所有的键值h#显示{'nyckel':'word','key':12,'Per':'Johansson’}g.clear()#清除字典中的所有项print(len(g))#显示0条件语句:ififcondition_1:statement_block_1[elifcondition_2:statement_block_2][else:statement_block_3]age=17ifage>=18:print("Youareoldenoughtovote!")print("Haveyouregisteredtovoteyet?")else:print("Sorry,youaretooyoungtovote.")print("Pleaseregistertovoteassoonasyouturn18!")age=12ifage<4:print("Youradmissioncostis$0.")elifage<18:print("Youradmissioncostis$5.")else:print("Youradmissioncostis$10.")循环语句:whilewhilecondition:statement_blockcurrent_number=1whilecurrent_number<=5:print(current_number)current_number+=1pets=['dog','cat','dog','goldfish','cat','rabbit','cat']print(pets)while'cat'inpets:pets.remove('cat')print(pets)循环语句:forforvariableinsequence:statement_blockelse:statement_blockmagicians=['alice','david','carolina']formagicianinmagicians:print(magician.title()+",thatwasagreattrick!")r=[]forcin'thisisastringwithblanks':#一个字符一个字符地遍历字符串
ifc=='':continue#跳过后面的代码块,继续循环
r.append(c)print(''.join(r))squares=[]forvalueinrange(1,11):squares.append(value**2)print(squares)循环中的break,continue和else103r=[1,3,10,98,-2,48]foriinr:ifi<0:print('inputcontainsnegativevalue!')break#跳出整个循环,包括'else'else:pass#什么都不做else:#如果循环是正常结束的,则执行print('inputisOK')break语句跳出循环continue语句结束本轮循环,开始下一轮循环else在循环条件不满足时被执行,被break的循环不执行elsepass语句是空语句,什么都不做,占位语句列表循环与ListComprehension104nums=[0,1,2,3,4]squares=[]forxinnums:squares.append(x**2)print(squares)#Prints[0,1,4,9,16]nums=[0,1,2,3,4]squares=[x**2forxinnums]print(squares)#Prints[0,1,4,9,16]nums=[0,1,2,3,4]even_squares=[x**2forxinnumsifx%2==0]print(even_squares)#Prints[0,4,16]animals=['cat','dog','monkey']foridx,animalinenumerate(animals):print('#%d:%s'%(idx+1,animal))字典循环与DictionaryComprehension105nums=[0,1,2,3,4]even_num_to_square={x:x**2forxinnumsifx%2==0}print(even_num_to_square)#Prints{0:0,2:4,4:16}d={'person':2,'cat':4,'spider':8}foranimalind:legs=d[animal]print('A%shas%dlegs'%(animal,legs))d={'person':2,'cat':4,'spider':8}foranimal,legsind.items():print('A%shas%dlegs'%(animal,legs))集合循环与SetComprehension106frommathimportsqrtnums={int(sqrt(x))forxinrange(30)}print(nums)#Prints{0,1,2,3,4,5}animals={'cat','dog','fish'}foridx,animalinenumerate(animals):print('#%d:%s'%(idx+1,animal))函数def函数名(参数列表):
函数体defgreet_user():print("Hello!")greet_user()defgreet_user(username):print("Hello,"+username.title()+"!")greet_user('jesse')defdescribe_pet(animal_type,pet_name):print("\nIhavea"+animal_type+".")print("My“+animal_type+"'snameis"+pet_name.title()+".")describe_pet('hamster','harry’)describe_pet('dog','willie')函数参数的默认值108defdescribe_pet(pet_name,animal_type='dog'):print("\nIhavea"+animal_type+".")print("My“+animal_type+"'snameis"+pet_name.title()+".")describe_pet('willie’)describe_pet(pet_name='harry',animal_type='hamster’)describe_pet(animal_type='hamster',pet_name='harry')参数可以有默认值当调用时没有给定参数,会采用默认值有默认值的参数必须放在参数列表的最后显式调用参数,可以改变参数顺序函数返回值109defget_formatted_name(first_name,last_name):full_name=first_name+''+last_namereturnfull_name.title()musician=get_formatted_name('jimi','hendrix')print(musician)一个函数不一定要有return语句实际上,函数默认总会返回一个值:'None''None'是一个特殊的值,意味着'什么都没有'模块110frommathimport*#导入模块'math'中的所有函数print(e,pi)print(cos(radians(180.0)))print(log(10.0))print(exp(-1.0))将函数存储在被称为模块的独立文件中,再将模块导入到主程序中数学函数在一个单独的模块中importmath
#导入整个'math‘模块print(math.e,math.pi)print(math.cos(math.radians(180.0)))print(math.log(10.0))print(math.exp(-1.0))frommathimportlog,cos
#导入‘math‘模块中的log和cos函数frommathimportlogaslg#导入‘math‘模块中的log函数,起别名lg文件操作:读111f=open('test.txt')#默认:只读模式line=f.readline()#读一行line#显示'Thisisthefirstline.\n’lines=f.readlines()#读所有剩余行lines#显示['Thisisthesecond.\n','Andthird.\n']一个文件操作对象由内建函数'open'创建文件对象有一系列函数‘read’:读取整个文件(或者说N字节),返回一个单独的字符串‘readline’:读取一行(然后跳到新的一行)‘readlines’:读取所有的行,返回一个字符串的列表文件操作:写112w=open('output.txt','w')#写模式(默认写的是文本)w.write('stuff')#并不自动添加新行w.write('\n')w.write('more\nandevenmore\n’)w.close()stuffmoreandevenmore‘write’函数只是简单地输出给定字符串字符串不一定是ASCII码,二进制串也可以用for循环读取文件113infile=open('test.txt')#只读模式outfile=open('test_upper.txt','w’)#写模式;创建文件forlineininfile:#遍历文件中的每一行
outfile.write(line.upper())infile.close()#并不严格要求;系统会自动执行outfile.close()注意:每行结尾会尾随一个换行符‘\n’可以使用字符串方法'strip'或者'rstrip'去除它参考资料和教程Python文档:/3/“用Python玩转数据”:/learn/hipython/《Python编程:从入门到实践》第2、3、4、5、6、7、8章Python库简介王秋月中国人民大学信息学院几个相关的库Numpy:高效地处理高维数组;高效的数学函数Quickstarttutorial:/doc/numpy/user/quickstart.htmlAVisualIntrotoNumPyandDataRepresentation:http://jalammar.github.io/visual-numpy/Matplotlib:可视化,绘制2D或3D图形Pyplottutorial:/users/pyplot_tutorial.html
Pandas:统计与数学分析10Minutestopandas:/pandas-docs/stable/getting_started/10min.html
Scikit-learn:机器学习/stable/documentation.html
NumpyNumpy(NumericalPythonextensions)是一个第三方的Python包,用于科学计算,前身是1995年就开始开发的一个用于数组运算的库极大地简化了向量和矩阵的操作处理,是一些主力软件包(如scikit-learn、Scipy、pandas和tensorflow)架构的基础部分。ndarray数据类型Numpy提供了一种新的数据结构:ndarray(n维数组,n-dimensionalarray)不同于列表和元组,数组只能存放相同类型的对象(如全部整型或全部浮点型)这使得在数组上的一些运算远远快于在列表上的相同运算;另外,数组占用更小的存储数组强有力地扩展了列表的索引机制创建ndarray>>>np.array([2,3,6,7])array([2,3,6,7])>>>np.array([2,3,6,7.])array([2.,3.,6.,7.])>>>np.array([2,3,6,7+1j])array([2.+0.j,3.+0.j,6.+0.j,7.+1.j])首先导入Numpy库然后开始创建n维数组>>>importnumpyasnp创建等差数列的数组arange([start,]stop[,step,],dtype=None)linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)>>>np.arange(5)array([0,1,2,3,4])>>>np.arange(10,100,20,dtype=float)array([10.,30.,50.,70.,90.])>>>np.linspace(0.,2.5,5)array([0.,0.625,1.25,1.875,2.5])>>>fromnumpyimportpi>>>x=np.linspace(0,2*pi,100)#用于在多个点执行某函数>>>f=np.sin(x)多维数组表示的矩阵>>>a=np.array([[1,2,3],[4,5,6]])>>>aarray([[1,2,3],[4,5,6]])>>>a.shape#行数和列数(2,3)>>>a.ndim#维数2>>>a.size#元素数6改变形状>>>importnumpyasnp>>>a=np.arange(0,20,1)#一维数组>>>b=a.reshape((4,5))#4行,5列>>>c=a.reshape((20,1))#2维>>>d=a.reshape((-1,4))#-1:自动决定行数>>>a.shape=(4,5)#改变a的形状形状(N,),(N,1)和(1,N)不同形状(N,):数组是一维的形状(N,1):数组是二维的,N行一列形状(1,N):数组是二维的,一行N列importnumpyasnpa=np.array([1,2,3,4,5])#一维数组b=a.copy()c1=np.dot(np.transpose(a),b)#转置对一维数组不起作用print(c1)c2=np.dot(a,np.transpose(b))#转置也可以写成b.Tprint(c2)ax=np.reshape(a,(5,1))bx=np.reshape(b,(1,5))c=np.dot(ax,bx)print(c)用相同元素填充数组>>>np.zeros(3)array([0.,0.,0.])>>>np.zeros((2,2),complex)array([[0.+0.j,0.+0.j],[0.+0.j,0.+0.j]])>>>np.ones((2,3))array([[1.,1.,1.],[1.,1.,1.]])>>>np.full((2,2),7)array([[7,7],[7,7]])用随机数填充数组rand:0到1之间[0,1)均匀分布的随机数randn:服从均值为0,方差为1的标准正态(高斯)分布的随机数也有其他标准概率分布的随机数>>>np.random.rand(2,4)array([[0.94672374,0.0383632,0.12738539,0.21592466],[0.49394559,0.2216863,0.3053351,0.51381235]])>>>np.random.randn(2,4)array([[1.05383548,-1.2142876,-0.83458293,0.53291161],[0.08311765,0.14007751,-0.06647882,1.09115942]])一维数组索引与切片[start:stop]的索引形式可用于从数组中抽取片段(从start位置开始直到stop位置但不包括stop)>>>a=np.array([0,1,2,3,4])>>>a[1:3]array([1,2])>>>a[:3]array([0,1,2])>>>a[1:]array([1,2,3,4])>>>a[1:-1]array([1,2,3])一维数组索引与切片整个数组:a或者a[:]想取出间隔的元素,可以在第二个冒号之后说明第三个数(步长):步长-1,可用于反转一个数组:>>>a=np.array([0,1,2,3,4])>>>a[:]arr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 语境理论在高中英语语法教学中的应用:新乡市二中的实证探究
- 语义理解:开启小学生读题能力提升之门
- 2026湖北黄石市卫生健康委员会招聘政府雇员1人笔试模拟试题及答案详解
- 2026年福州中西结合医院医护人员招聘笔试备考试题及答案详解
- 2026云南昆明医科大学第一附属医院招聘34人考试模拟试题及答案详解
- 输血过程中的监测与管理
- 2026陕西西安市经开第二学校合同制教师招聘笔试模拟试题及答案详解
- 2026年蚌埠市产发产业投资集团有限公司公开招聘工作人员7名笔试参考题库及答案详解
- 2026湖南怀化学院招聘20人考试参考题库及答案详解
- 2026年安徽华荣远诚人力资源服务集团有限公司派遣至庐阳区某单位工作人员1名招聘笔试模拟试题及答案详解
- (正式版)JBT 106-2024 阀门的标志和涂装
- 《静静的顿河》课件
- 人工智能技术在图像识别中的应用
- GB/T 5072-2023耐火材料常温耐压强度试验方法
- 制药用水设备行业营销策略方案
- 高校思想政治理论课教学与研究
- 落水管更换施工方案
- 智能网联汽车技术PPT完整全套教学课件
- 胫骨远端骨折治疗演示
- 导尿管相关尿路感染(CAUTI)预防与控制措施
- 公交车驾驶员岗位安全操作规程
评论
0/150
提交评论