python算法

垃圾回收机制

让人想犯罪 __ 提交于 2019-12-03 14:50:14
Python-垃圾回收(GC)机制 一、什么是GC 在Java中,对象所占用的内存在对象不再使用后会自动被回收。这些工作是由一个叫垃圾回收器 ( Garbage Collector )的进程完成的。 python和其他很多高级语言一样,都自带垃圾回收机制,即GC机制。 二、GC机制 Python中的垃圾回收是以引用计数为主,标记-清除和分代收集为辅。引用计数最大缺陷就是循环引用的问题,所以Python采用了辅助方法。 注意:   1、垃圾回收时,Python不能进行其它的任务,频繁的垃圾回收将大大降低Python的工作效率;   2、Python只会在特定条件下,自动启动垃圾回收(垃圾对象少就没必要回收)   3、当Python运行时,会记录其中分配对象(object allocation)和取消分配对象(object deallocation)的次数。当两者的差值高于某个阈值时,垃圾回收才会启动。 1、引用计数 Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。 原理 引用计数法的原理是每个对象维护一个ob_refcnt,用来记录当前对象被引用的次数,也就是来追踪到底有多少引用指向了这个对象。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少。当引用计数为0时,该对象生命就结束了。 源码如下: /

维特比算法及python实现

霸气de小男生 提交于 2019-12-03 14:47:54
先放一张找到的算法流程图: 上图解释 : A:状态转移概率矩阵,Aij表示状态i到状态j转换的概率,即P(state=j | state=i)。下面代码中以P表示。 B:观测矩阵,Bij表示给定状态i,观测结果为j的概率。即P(observation=j | state=i) π:初始时状态概率分布,表示各状态出现的概率。代码中以pi表示。 O:输入的观测序列。 :表示经过节点(时刻t,状态state=i)的局部最优路径到此节点时对应的概率,即给定X=(x1,...xt,...xn)子序列(x1,x2,...xt)时,对应的最佳状态序列(末状态state=i)的概率值。 下面代码中以delta表示 :跟上面相关。表示上面最优路径经过的节点的上一个状态id。下面代码中以w表示。 1式理解:右边为状态state=i出现的概率乘以(状态i下观测到O[t=1]的概率) 2式理解:当前节点概率值,为(上一时刻各节点概率值乘以状态转换概率)的最大值,再乘以状态state=i时观测到O[t]的概率。这就是 动态规划 的思想了。 以上,熟悉 隐马尔可夫模型 的话,理解应该没问题了。 ------------------------------------------------------------------------- 下面进入代码部分: import numpy as np def my

叮!你需要的Python面试指南以送到!

怎甘沉沦 提交于 2019-12-03 14:21:21
收拾了一下自己学习Python过程中的笔记,将Python面试过程中经常涉及到的一些问题整理出来。没有总结到的知识点,欢迎大家在评论里提出来,本文长期更新。 1、Python基本语法 1、@staticmethod 和 @classmethod Python中有三种方法,实例方法、类方法(@classmethod)、静态方法(@staticmethod)。 类方法的第一个参数是cls,表示该类的一个实例,静态方法基本上和一个全局函数相同 class A(object): def foo(self, x): print("executing foo(%s,%s)" % (self, x)) print('self:', self) @classmethod def class_foo(cls, x): print("executing class_foo(%s,%s)" % (cls, x)) print('cls:', cls) @staticmethod def static_foo(x): print("executing static_foo(%s)" % x) a = A() print(a.foo(1)) print(a.class_foo(1)) print(a.static_foo(1)) 2、迭代器和生成器 迭代器:是访问集合元素的一种方式

Python算法系列(一):衡量算法好坏的标准

只谈情不闲聊 提交于 2019-12-03 13:35:57
Python以它特有的优雅、简洁,深深的吸引着我,对我而言用Python写算法是一件无比快乐的事情,我乐在其中 算法的开销 我眼中的好算法,首先要能正确的解决问题,这是基础,如果100次的实验有20次的较大偏差,即使代码写得再漂亮也是徒劳;其次,要有良好的可读性,并且考虑到后期维护的可能,一个好算法还要有足够好的可维护性;最后也是本文、本系列介绍的重点,就是算法的时间性能 一个算法的运行,会产生两种开销: 1)处理时间 2)空间或内存 当选择算法的时候,必须解决时间和空间的平衡问题 衡量算法的运行时间 衡量算法的运行时间有三种方法:基准评价、统计指令,以及复杂度分析 基准评价(Benchmarking) 操作 衡量算法时间代价的一种方法是,使用计算机的时钟来获取一个实际的运行时间,这个过程叫基准评价(benchamrking)或探查(profiling) 其方法是首先确定几个具有相同大小的不同数据集合的时间,然后计算出平均的时间;接下来针对越来越大的数据集合,收集相似的数据,在进行几次这样的测试后,就有了足够的数据能够预测算法对任何大小的一个数据集合的表现了 缺陷 1)不同的硬件平台的处理速度不同,因此一个算法的运行时间在不同机器上是不同的,此外程序的运行时间在不同类型的操作系统和硬件上也是不同的,最后不同的编程语言和编译器也会得到性能不同的代码 2)对于很大的数据集合

python实现一可升降式的冒泡排序

前提是你 提交于 2019-12-03 12:03:20
前几天看了个冒泡的排序,这里手敲了一下代码,简单记录如下: def bubble_sort(arr, order='asc'): # #可选升降序的冒泡排序, order>0升序,order<0降序 # swapNeeded = True # flag位 counter = 0 # 计数(用于统计多少次排好序) for i in range(len(arr)): # 这个循环负责设置冒泡排序进行的次数(比如说n个数,则只要进行n-1次冒泡,就可以把这个n个数排序好) swap_needed = False for j in range(0, len(arr)-i-1): # 这里这个j呢就是控制每一次具体的冒泡过程,请你想一想,我们第一次冒泡需要冒几次,也就是说需要比较几次, # 假如有三个数,那只需要两次就可以了,当下一次时,最后一个 # 已经是有序的了,所以说少冒泡一次,所以这里j每次都会减去i的值,即不用冒“无用之泡泡” if order == 'asc': if arr[j] > arr[j+1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] swap_needed = True elif order == 'desc': if arr[j] < arr[j+1]: arr[j], arr[j + 1] = arr[j + 1], arr

20191104-基于Python计数排序算法分析

会有一股神秘感。 提交于 2019-12-03 11:07:44
计数排序 计数排序算法没有用到元素间的比较,它利用元素的实际值来确定它们在输出数组中的位置,也就是说元素从未排序状态变为已排序状态的过程,是由额外空间的辅助和元素本身的值决定的,将每个元素出现的次数记录到辅助空间后,通过对辅助空间内数据的计算,即可确定每一个元素最终的位置,计数排序算法是一个稳定的排序算法。 算法过程 根据待排序集合中最大元素和最小元素的差值范围,申请额外空间; 遍历待排序集合,将每一个元素出现的次数记录到元素值对应的额外空间内; 对额外空间内数据进行计算,得出每一个元素的正确位置; 将待排序集合每一个元素移动到计算得出的正确位置上。 给的无序数组,快速得出其排序结果 arr=[9,3,5,4,9,1,2,7,8,1,3,6,5,3,4,0,10,9 ,7,9] 第一步:求出最大值和最小值,申请额外空间长度等于最大值-最小值+1 max_val = max(arr) #max_val = 10 min_val = min(arr) #min_val = 0 temp_arr = [0]*(max_val-min_val+1) 第二步:遍历待排序集合,将每一个元素出现的次数记录到元素值对应的额外空间内 for i in arr: temp_arr[i-min_val]+=1 print(temp_arr) 输出结果: [1, 2, 1, 3, 2, 2, 1, 2,

python库之——sklearn

岁酱吖の 提交于 2019-12-03 09:43:54
机器学习库sklearn 官方documentation(资料)中分为不同的部分: 其中我们主要讲User Guide(机器学习算法理论介绍)、API(程序实现方法): 一、User Guide https://scikit-learn.org/stable/user_guide.html 模块 说明 Supervised learning 监督学习 监督学习的各种算法介绍 Unsupervised learning 非监督学习 非监督学习的各种算法介绍 Model selection and evaluation模型选择和评价 交叉验证、调参、模型评价、验证曲线 Inspection 检查 Dataset transformations 数据转换 特征抽取、数据预处理、缺失值处理、非监督降维方法、随机投影、核近似、转换预测目标 Dataset loading utilities 数据下载程序 玩具数据、真实数据集、生成数据、下载其它数据 Computing with scikit-learn 利用sklearn计算 对大数据集的计算策略、计算表现、并行计算、资源管理和配置 二、api 和前面的内容对应,这个内容里给了在sklearn里的实现方法。 模块 功能 sklearn.base module: Base classes and utility functions

python分类预测模型的特点

巧了我就是萌 提交于 2019-12-03 09:42:52
python分类预测模型的特点 模型 模型特点 位于 SVM 强大的模型,可以用来回归,预测,分类等,而根据选取不同的和函数,模型可以是线性的/非线性的 sklearn.svm 决策树 基于"分类讨论,逐步细化"思想的分类模型,模型直观,易解释 sklearn.tree 朴素贝叶斯 基于概率思想的简单有效的分类模型,能够给出容易理解的概率解释 sklearn.naive_bayes 神经网络 具有强大的拟合能力,可疑用于拟合,分类等,它有多个增强版本,如递神经网络,卷积神经网络,自编吗器等,这些是深度学习的模型基础 Keras 逻辑回归 比较基础的线性分类模型,很多时候是简单有效的选择 sklearn.linear_model 随机森林 思想跟决策树类似,精度通常比决策树要高,缺点是由于随机性, 丧失了决策树的可解释性 sklearn.ensemble python建模的步骤: 建立一个对象(这个对象是空白的,需要进一步训练) 然后,我们要设置模型的参数 接着就是通过fit()方法对模型进行训练 最后通过predict()方法预测结果 对模型的评估score()方法等 聚类分析 常用聚类分析算法 与分类不同,聚类分析是在没有给定划分类别的情况下,根据数据相似度进行样本分组的一种方法.与分类模型需要使用有类标记样本构成的训练数据不同,聚类模型可疑建立在吴磊标记的数据上

python书单121本从入门到进阶推荐书籍最全整理

百般思念 提交于 2019-12-03 09:31:40
python书单121本打包下载 作为Python爱好者,广泛搜集了关于Python的书籍,具体包括数据挖掘、人工智能、网络编程等,范围广,资料全面,多为可编辑的pdf版本,不少都是各学科领域Python的书籍。当然论坛也有这些书籍,但是有的书籍较为难找,且大多数需要论坛币。为此,本人花费大量时间搜集整理Python书籍,并上传以下超过100本书籍,希望能够为Python爱 好者节省搜集书籍的时间,相互交流,共同学习。 Python具有一些特征,使其成为第一种编程语言的接近完美的选择。Python基本结构简单、干净、设计精良,使学生能够专注于算法思维和程序设计的主要技能,而不会陷晦涩难解的语言细节。在Python中学习的概念可以直接传递给后续学习的系统语言(如C ++和Java)。但Python不是一种“玩具语言”,它是一种现实世界的生产语言,可以在几乎每个编程平台上免费提供,并且具有自己易于使用的集成编程环境。最好的是,Python让学习编程又变得有趣了。 附全部书单百度云盘下载 https://pan.baidu.com/s/1SN6kmn7ROndTbURxSyPAaQ 提取码:2sn6 来源: https://www.cnblogs.com/shenduxuexi/p/11785509.html

python基础面试题(全网最全!)

只愿长相守 提交于 2019-12-03 07:50:31
目录 1、为什么学习Python? 2、通过什么途径学习的Python? 3、Python和Java、PHP、C、C#、C++等其他语言的对比? 4、简述解释型和编译型编程语言? 5、Python解释器种类以及特点? 6、位和字节的关系? 7、b、B、KB、MB、GB 的关系? 8、请至少列举5个 PEP8 规范 9、通过代码实现如下转换: 10、请编写一个函数实现将IP地址转换成一个整数。 11、python递归的最大层数? 12、求结果: 13、ascii、unicode、utf-8、gbk 区别? 14、字节码和机器码的区别? 15、三元运算规则以及应用场景? 16、列举 Python2和Python3的区别? 17、用一行代码实现数值交换: 18、Python3和Python2中 int 和 long的区别? 19、xrange和range的区别? 20、文件操作时:xreadlines和readlines的区别? 21、列举布尔值为False的常见值? 22、字符串、列表、元组、字典每个常用的5个方法? 23、lambda表达式格式以及应用场景? 24、pass的作用? 25、*arg和**kwarg作用? 26、is和==的区别? 27、简述Python的深浅拷贝以及应用场景? 28、Python垃圾回收机制? 29、python的可变类型和不可变类型? 30、求结果: