python算法

Python里面几种排序算法的比较,sorted的底层实现,虽然我们知道sorted的实现方式,但是

半世苍凉 提交于 2020-01-10 18:45:58
算法与数据结构基础 原文链接: http://note.youdao.com/noteshare?id=7b9757930ce3cc9e0a5e61e4d0aa9ea2&sub=2726FFA02ADE4E74A302D8DA7646FB46 查找算法: 二分查找法: 简介 :二分查找法又被称为折半查找法,用于预排序的查找问题 过程 : 如果在列表a中查找元素t,先将列表a中间位置的项与查找关键字t比较,如果两者相等,则成功。 否则,将表分为前后两个子表 如果中间位置大于t,则进一步查找前一子表,否则,查找后一子表 重复上述过程 优劣 : 时间复杂度为O(log~2~N),比较快 缺点就是必须是有序列表 排序算法: 冒泡排序 简介 :两两比较大小,如果不满足升序关系,则交换 过程 :略 优劣: : 时间复杂度为O(N^2^),速度较慢 稳定 选择排序 简介 :找出最小值,然后放入一个新的列表中 过程 :略 优劣: : 时间复杂度为O(N^2^),速度较慢 稳定 插入排序法 简介 :依次检查需要排序的列表,每次取出一个元素放入另一个排好序的列表中的适当位置。 过程 :略 优劣: : 时间复杂度为O(N^2^) 速度不稳定,最佳情况为线性增长,最差情况为N^2^,所以速度实际上比前两种快 归并排序 简介 :分而制之的思想 过程 : 将包含N个元素的列表分为两个含N/2元素的子列表.

python数据结构与算法

你离开我真会死。 提交于 2020-01-10 13:12:52
二分查找的测试程序,从命令行参数中获取测试列表的各元素以及所要查找的关键字。(主要是列表参数的处理) # coding=utf-8 import sys #使用以下语句将参数的str格式转换为int格式 L = list ( map ( int , sys . argv [ 1 ] . split ( "," ) ) ) target = int ( sys . argv [ 2 ] ) def BinarySearch ( ) : print ( L ) print ( target ) left = 0 right = len ( L ) - 1 while left <= right : mid = ( left + right ) // 2 if L [ mid ] < target : left = mid + 1 elif L [ mid ] > target : right = mid - 1 else : return mid return - 1 def main ( ) : print ( "查找的关键字位于列表的索引:" , BinarySearch ( ) ) if __name__ == '__main__' : main ( ) 归并排序 import sys L = list ( map ( int , ( sys . argv [ 1 ] .

Python机器学习:泰坦尼克号获救预测一

让人想犯罪 __ 提交于 2020-01-10 09:50:59
数据集下载地址: https://github.com/fayduan/Kaggle_Titanic/blob/master/train.csv 视频地址: http://study.163.com/course/courseLearn.htm?courseId=1003551009#/learn/video?lessonId=1004052093&courseId=1003551009 一、项目概要 1、应用   模式识别、数据挖掘(核心)、统计学习、计算机视觉、语言识别、自然语言处理 2、模式、流程   训练样本 --> 特征提取 --> 学习函数 --> 预测 二、Python实践 1、应用的模块   Numpy:科学计算库   pandas:数据分析处理库   Matplotlib:数据可视化库   Scikit-learn:机器学习库 2、数据源处理 ① 导入数据:    1 #coding: utf-8 2 import pandas 3 titanic = pandas.read_csv('train.csv') ② 对缺失数据的列进行填充: 1 #对于缺失的数据进行补充 median 填充中位数 2 titanic['Age'] = titanic['Age'].fillna(titanic['Age'].median()) ③ 属性转换

Python KNN算法

僤鯓⒐⒋嵵緔 提交于 2020-01-09 05:00:11
  机器学习新手,接触的是《机器学习实战》这本书,感觉书中描述简单易懂,但对于python语言不熟悉的我,也有很大的空间。今天学习的是k-近邻算法。    1. 简述机器学习   在日常生活中,人们很难直接从原始数据本身获得所需信息。 而机器学习就是把生活中无序的数据转换成有用的信息。 例如,对于垃圾邮件的检测,侦测一个单词是否存在并没有多大的作用,然而当某几个特定单词同时出现时,再辅以考虑邮件的长度及其他因素,人们就可以更准确地判定该邮件是否为垃圾邮件。   机器学习分为 监督学习 和 无监督学习 ,其中:   (1) 监督学习: 包含分类和回归。分类,是将实例数据划分到合适的分类中。回归,主要用于预测数值形数据。因为这类算法必须知道预测什么,即目标变量的分类信息,所以称为监督学习。   (2) 无监督学习 :此时数据没有类别信息,不能给定目标值。在无监督学习中,将数据集合分成由类似的对象组成的多个类的过程称为 聚类 ,将寻找描述数据统计值的过程称为 密度估计 ,此外,无监督学习还可以减少数据特征的维度,以便我们可以使用二维或三维图形更加直观地展示数据信息。   以下是机器学习的主要算法:   监督学习: k-近邻算法(KNN) ,朴素贝叶斯算法,支持向量机(SVM),决策树        线性回归,局部加权线性回归,Ridge回归,Lasso最小回归系数估计   无监督学习:K

线程、进程和协程

∥☆過路亽.° 提交于 2020-01-09 04:09:29
Treading用于提供线程相关的操作,线程是应用程序中工作的最小单元 #!/usr/bin/env python # coding:utf-8 import threading import time def show(arg): time.sleep(1) print 'thread'+str(arg) for i in range(10): t = threading.Thread(target=show,args=(i,)) t.start() print 'main thread stop' ''' 打印结果: main thread stop thread0 thread5thread4thread1thread2 thread3 thread7thread6thread8 thread9 ''' 上述代码创建了10个进程,然后控制器就交给CPU,CPU根据指定的算法进行调度,分片执行指令。出现顺序错乱的现象正常,因为他们都在同时抢占屏幕。 更多方法: start 线程准备就绪,等待CPU调度 setName 为线程设置名称 getName 获取线程名称 setDaemon 设置为后台线程或前台线程(默认) 如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,均停止 如果是前台线程,主线程执行过程中,前台线程也在进行

Python 线性回归(Linear Regression) 基本理解

爱⌒轻易说出口 提交于 2020-01-08 23:53:53
背景 学习 Linear Regression in Python – Real Python ,对线性回归理论上的理解做个回顾,文章是前天读完,今天凭着记忆和理解写一遍,再回温更正。 线性回归(Linear Regression) 刚好今天听大妈讲机器学习,各种复杂高大上的算法,其背后都是在求”拟合“。 线性回归估计是最简单的拟合了。也是基础中的基础。 依然是从字面上先来试着拆解和组合: 首先, Regression 回归,指的是研究变量之间的关系,这个由来在 Python 线性回归(Linear Regression) - 到底什么是 regression? 一文中讲多了,这里不多重复。 然后, linear 线性,很直观:直线。 二者连在一起,便是:变量之间呈直线关系。 那具体是哪些变量之间? 因变量 y 和 自变量 (x1...xr) 之间。 𝑦 = 𝛽₀ + 𝛽₁𝑥₁ + ⋯ + 𝛽ᵣ𝑥ᵣ + 𝜀 当只有一个 x1 的时候,就是最简单的线性回归 𝑦 = 𝛽₀ + 𝛽₁𝑥₁ 。 具体怎么理解这个公式呢? 举个简化的例子:员工的工资 y 与 学历 x 的关系。 假设学历越高,工资也越高,二者是某种程度上的线性关系, 那在 理论上 会存在这么一个公式 y = 𝛽₀ + 𝛽₁𝑥 ,其中,x1...xn, y1...yn: x 和 y 的数据很容易拿到(当然合法渠道了,假设你是

python第一阶段容器推导式and函数学习第一阶段day07

吃可爱长大的小学妹 提交于 2020-01-08 20:50:46
推导式 列表推导式 [处理变量 for 变量 in 可迭代对象 if 条件] 字典推导式 {处理变量 : 处理变量 for 变量 in 可迭代对象 if 条件} 集合推导式 {处理变量 for 变量 in 可迭代对象 if 条件} 适用性: 根据可迭代对象,构建容器时. # 需求1:range(10) --> key:0-9 value: key的平方 dict01 = { item : item ** 2 for item in range ( 10 ) } print ( dict01 ) # 需求2:range(10) --> key:0-9 value: key的平方 # 只考虑奇数 dict01 = { item : item ** 2 for item in range ( 10 ) if item % 2 } print ( dict01 ) # 练习1:["齐天大圣","八戒","唐三藏"]-->key:字符 vlaue:字符长度 # {"齐天大圣":4,"八戒":2,"唐三藏":3} list_names = [ "齐天大圣" , "八戒" , "唐三藏" ] dict_names = { item : len ( item ) for item in list_names } print ( dict_names ) # 练习2:["张无忌","赵敏","周芷若

python的库有多少个?python有多少个模块?

守給你的承諾、 提交于 2020-01-08 13:42:17
这里列举了大概500个左右的库: ! Chardet字符编码探测器,可以自动检测文本、网页、xml的编码。 colorama主要用来给文本添加各种颜色,并且非常简单易用。 Prettytable主要用于在终端或浏览器端构建格式化的输出。 difflib,[Python]标准库,计算文本差异 Levenshtein,快速计算字符串相似度。 fuzzywuzzy,字符串模糊匹配。 esmre,正则表达式的加速器。 shortuuid,一组简洁URL/UUID函数库。 ftfy,Unicode文本工具7 unidecode,ascii和Unicode文本转换函数。 xpinyin,将汉字转换为拼音的函数库 pangu.py,调整对中日韩文字当中的字母、数字间距。 pyfiglet,Python写的figlet程序,使用字符组成ASCII艺术图片 uniout,提取字符串中可读写的字符 awesome slugify,一个Python slugify库,用于处理Unicode。 python-slugify,转换Unicode为ASCII内码的slugify函数库。 unicode-slugify,生成unicode内码,Django的依赖包。 ply,Python版的lex和yacc的解析工具 phonenumbers,解析电话号码,格式,存储和验证的国际电话号码。 python

第一章:机器学习基础

∥☆過路亽.° 提交于 2020-01-08 04:23:38
第一部分:分类 本书前两部分主要探讨监督学习(supervisedieaming)。在监督学习的过程中,我们只需要给定 输入样本集 ,机器就可以从中推演出指定 目标变量 的可能结果。监督学习相对比较简单,机器只需从输入数据中 预测合适的模型 ,并从中 计算出目标变量的结果 。 监督学习一般使用两种类型的目标变量:标称型和数值型。标称型目标变量的结果只在有限目标集中取值,如真与假、动物分类集合{爬行类、鱼类、哺乳类、两栖类、植物、真菌};数值型目标变量则可以从无限的数值集合中取值,如0.100、42.001、000.743等。 数值型目标变量主要用于回归分析 ,将在本书的第二部分研究, 第一部分主要介绍分类 。 本书的前七章主要研究分类算法,第2 章讲述最简单的分类算法:k-近邻算法,它使用距离矩阵进行分类;第3 章引入了决策树,它比较直观,容易理解,但是相对难于实现;第4 章将讨论如何使用概率论建立分类器;第5 章将讨论Logistic 回归,如何使用最优参数正确地分类原始数据,在搜索最优参数的过程中,将使用几个经常用到的优化算法;第6 章介绍了非常流行的支持向量机;第一部分最后的第7 章将介绍元算法— AdaBoost, 它由若干个分类器构成,此外还总结了第一部分探讨的分类算法在实际使用中可能面对的非均衡分类问题,一旦训练样本某个分类的数据多于其他分类的数据

Python算法学习《一》

戏子无情 提交于 2020-01-07 22:03:17
Python算法学习《一》 给定一个整数数组和一个目标值,找出数组中和为目标值的个两个数 同样的元素不能重复利用 L = [3, 7, 11, 9] T = 10 方法一直接2个循环遍历 def fun(num, target): for i in range(len(num) - 1): for j in range(i + 1, len(num)): if target - num[i] == num[j]: return [i, j] print(fun(L, T)) 结果: [0, 1] 方法二:使用索引,index()函数 def fun(num, target): for i in range(len(num)): if target - num[i] in num: j = num.index(target - num[i]) if i == j: # 同样的元素不能重复利用 continue else: return [i, j] 结果: print(fun(L, T)) [0, 1] 方法三:使用字典储存差值 def fun(num, target): for i in range(len(num)): if num[i] in d: return [d[num[i]], i] # 遍历的元素是否与字典中差值相等, 如果是,那么因数2就找到了,d[差值