python算法

day24 内置方法,异常机制

我的梦境 提交于 2019-12-01 10:06:19
目录 day24 内置方法,异常机制 今日内容 昨日回顾 今日内容详细 内置方法(魔法方法) __len__(self) 获取长度 异常处理 day24 内置方法,异常机制 今日内容 内置方法(魔法方法) 异常处理 昨日回顾 约束 在父类建立一种约束 抽象类 from abc import ABCMeta, abstractmethod abc:abstract base class,抽象基类 ABCMeta:抽象类的元类,用来构造类 abstractmethod:装饰器,用来将普通的实例方法转换为抽象方法 如果子类中没有重写被abstractmethod装饰过的方法,会报错 类方法 用classmethod修饰 第一个参数为类对象,一般用cls表示 实例对象和类对象都可以调用类方法,但一般用类对象调用 类方法是酱类本身作为对象进行操作的方法 静态方法 使用staticmethod修饰的方法 没有class和cls参数,不能调用类或实例的属性和方法 类和实例方法都可以调用静态方法 静态方法是独立的单纯的函数,仅仅托管于类的名称空间中 property property是一种特殊的属性,访问它时会执行一段功能,然后返回值 property是装饰器,装时后的方法使用起来与属性类似,不需要加括号 只有@property是只读,加上@setter定义可读可写,加上

python之堆排序算法代码

橙三吉。 提交于 2019-12-01 09:14:18
以下是个人写的堆排序代码,原理我就不解释了(简单来说就是先建立一个大顶堆,然后进行顶点和最后节点的互换,互换之后需要重新建堆,两两比对,具体的话可以参照其他的,不过代码还是会于注释的。 #根据问题进行编码,由于数组下标是从0开始的,而树的节点从1开始,我们还需要引入一个辅助位置,Python提供的原始数据类型list实际上是一个线性(Array), #由于我们需要在序列最左边追加一个辅助位,线性表这样做的话开销很大,需要把数组整体向右移动,所以list类型没有提供形如appendleft的函数,但是在一个 #链表里做这种操作就很简单了,Python的collections库里提供了链表结构deque,我们先使用它初始化一个无序序列: from collections import deque #引用链表 def heap_adjust(data,start,length): #建一个大顶堆,上面最大,且父节点比左右两个子节点都要大 temp=data[start] #定义一个中间变量temp,代表父节点的值 left=start*2 #父节点下左节点的索引值 right=left+1 #父节点下右节点的索引值 while left<=length #主要在两两比对的时候需要用到while if left<length and data[left]<data[right]:

python 类的特殊方法

99封情书 提交于 2019-12-01 09:05:50
python对象的魔法方法 魔法方法 含义 基本的魔法方法 __new__(cls[, ...]) 1. __new__ 是在一个对象实例化的时候所调用的第一个方法 2. 它的第一个参数是这个类,其他的参数是用来直接传递给 __init__ 方法 3. __new__ 决定是否要使用该 __init__ 方法,因为 __new__ 可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的实例,如果 __new__ 没有返回实例对象,则 __init__ 不会被调用 4. __new__ 主要是用于继承一个不可变的类型比如一个 tuple 或者 string __init__(self[, ...]) 构造器,当一个实例被创建的时候调用的初始化方法 __del__(self) 析构器,当一个实例被销毁的时候调用的方法 __call__(self[, args...]) 允许一个类的实例像函数一样被调用:x(a, b) 调用 x.__call__(a, b) __len__(self) 定义当被 len() 调用时的行为 __repr__(self) 定义当被 repr() 调用时的行为 __str__(self) 定义当被 str() 调用时的行为 __bytes__(self) 定义当被 bytes() 调用时的行为 __hash__(self) 定义当被 hash()

即学即用的 30 段 Python 实用代码

眉间皱痕 提交于 2019-12-01 09:03:20
[☞ 分享:最全最新的Python学习大礼包 ☜ 点击查看](https://mp.weixin.qq.com/s?__biz=MzU2MzgyODA4OA==&mid=100000592&idx=1&sn=6ee048d8420d213be8b10b87e58669ee&chksm=7c5507474b228e51cca78c46d40cb3bead597b18caa0356dcd228c349767a171bff12b5ceb2c#rd) >编译:Pita & AI开发者,作者:Fatos Morina Python是目前最流行的语言之一,它在数据科学、机器学习、web开发、脚本编写、自动化方面被许多人广泛使用。它的简单和易用性造就了它如此流行的原因。 在本文中,我们将会介绍 30 个简短的代码片段,你可以在 30 秒或更短的时间里理解和学习这些代码片段。 ## 1.检查重复元素 下面的方法可以检查给定列表中是否有重复的元素。它使用了 set() 属性,该属性将会从列表中删除重复的元素。 ```python def all_unique(lst): return len(lst) == len(set(lst)) x = [1,1,2,2,3,2,3,4,5,6] y = [1,2,3,4,5] all_unique(x) # False all_unique(y) #

python常用算法学习(3)

点点圈 提交于 2019-12-01 08:32:56
1,什么是算法的时间和空间复杂度   算法(Algorithm)是指用来操作数据,解决程序问题的一组方法,对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但是在过程中消耗的资源和时间却会有很大的区别。   那么我们应该如何去衡量不同算法之间的优劣呢?   主要还是从算法所占用的 时间 和 空间 两个维度取考量。 时间维度:是指执行当前算法所消耗的时间,我们通常使用时间复杂度来描述。 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用空间复杂度来描述   因此,评价一个算法的效率主要是看它的时间复杂度和空间复杂度情况,然而,有的时候时间和空间却又是鱼与熊掌,不可兼得,那么我们就需要从中去取一个平衡点。   下面分别学习一下时间复杂度和空间复杂度的计算方式。 1.1 时间复杂度   我们想要知道一个算法的时间复杂度,很多人首先想到的方法就是把这个算法程序运行一遍,那么它所消耗的时间就自然而然的知道了。这种方法可以吗?当然可以,不过它也有很多弊端。   这种方式非常容易受运行环境的影响,在性能高的机器上跑出来的结果与在性能低的机器上跑的结果相差会很大。而且对测试时使用的数据规模也有很大关系。再者我们再写算法的时候,还没有办法完整的去运行呢,因此,另一种更为通用的方法就出来了:大O符号表示法,即T(n) = O(f(n))。   我们先看一个例子: for(i=1; i

堆排序算法以及python实现

断了今生、忘了曾经 提交于 2019-12-01 08:07:38
堆满足的条件:1,是一颗完全二叉树。2,大根堆:父节点大于各个孩子节点。每个节点都满足这个道理。小根堆同理。 parent = (i-1)/2 #i为当前节点 left = 2*i+1 right = 2*i + 2 堆可以分为大根堆和小根堆,这里用大根堆的情况来定义操作: (1)大根堆调整(max_heapify): 将堆的末端子节点作调整,使得子节点永远小于父节点。这是核心步骤,在建堆和堆排序都会用到。 比较i的根节点和与其所对应i的孩子节点的值,当i根节点的值比左孩子节点的值要小的时候,就把i根节点和左孩子节点所对应的值交换,同理,就把i根节点和右孩子节点所对应的值交换。 然后再调用堆调整这个过程,可见这是一个递归的过程。 def max_heapify(heap,heapSize,root): # 调整列表中的元素并保证以root为根的堆是一个大根堆 ''' 给定某个节点的下标root,这个节点的父节点、左子节点、右子节点的下标都可以被计算出来。 父节点:(root-1)//2 左子节点:2*root + 1 右子节点:2*root + 2 即:左子节点 + 1 ''' left = 2*root + 1 right = left + 1 larger = root if left < heapSize and heap[larger] < heap[left]:

python算法对音频信号处理Sonification :Gauss-Seidel迭代算法

↘锁芯ラ 提交于 2019-12-01 07:57:49
原文链接: http://tecdat.cn/?p=7620 可以将44.1kHz单通道.wav文件中的一秒读取到长度为44100的数组(称为b)中。给定矩阵A,我们寻求系统Ax = b的解。通过Gauss-Seidel的迭代,向量如果我们将b记录的录音,则将一些白噪声作为我们的初始猜测,并在每次交替中写出Ax,我们会观察到b中高音调的音符首先变得可听,而同时白噪声的音调分解。 最初的12秒.wav文件的音频(白噪声) initialAx.wav 初始Ax,残差和残差FFT的图: ​ ​ ​ 经过一轮迭代,高音 转化gauss_seidel_out000000.wav 在光谱中可以看到一些结构: ​ ​ ​ 第二次 迭代 : gauss_seidel_out000001.wav ​ ​ ​ 第三次 迭代 : gauss_seidel_out000002.wav ​ ​ ​ 第四次 迭代 : gauss_seidel_out000003.wav ​ ​ ​ 这一切都在python中完成。将.wav文件加载到数组中,在scipy中还不错。为了避免缓存问题,必须使用稀疏矩阵类,因为12秒的.wav文件需要一个大小为12 * 44100的数组。这是我使用的TridiagonalMatrix类代码片段: from numpy import * #a tridiagonal matrix

Python后端技术栈(二)

坚强是说给别人听的谎言 提交于 2019-12-01 07:52:35
每日分享 Darkness cannot drive out darkness; only light can do that. Hate cannot drive out hate; only love can do that. 黑暗无法驱除黑暗; 只有光可以做到这一点。 仇恨无法驱走仇恨; 只有爱才能做到这一点。 小闫笔记 : 不知你苦难,无法劝你向善。但你要知道,爱会让你过的更轻松。最后送给大家泰戈尔的《飞鸟集》中的一句『世界以痛吻我,我要回报以歌』。 1.2算法与数据结构 上篇文章对本系列整体情况作了说明。并且回顾了 Python 语言基础部分。美中不足的是上篇文章的结构有些混乱,从这篇文章开始,严格按照导航的编号进行编写。 本篇文章将要开始 Python 算法与数据结构相关知识的总结回顾。废话少说,开始吧.... 1.2.1 Python 内置数据结构算法 常用内置数据结构和算法 : 线性结构 : 语言内置:list(列表)、tuple(元组) 内置库:array(数组,不常用)、collections.namedtuple 链式结构 : 语言内置:无 内置库:collections.deque(双端队列) 字典结构 : 语言内置:dict(字典) 内置库:collections.Counter(计数器)、OrderedDict(有序字典) 集合结构 : 语言内置:set

Python要如何实现(列表)排序?

放肆的年华 提交于 2019-12-01 07:22:28
排序,是许多编程语言中经常出现的问题。同样的,在Python中,如何是实现排序呢?(以下排序都是基于列表来实现) 一、使用Python内置函数进行排序 Python中拥有内置函数实现排序,可以直接调用它们实现排序功能 Python 列表有一个内置的 list.sort() 方法可以直接修改列表。还有一个 sorted() 内置函数,它会从一个可迭代对象构建一个新的排序列表。 1.sort() 函数: list.sort(cmp=None, key=None, reverse=False) 其中参数的含义是: cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。 key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 reverse -- 排序规则, reverse = True 降序, reverse = False 升序(默认)。 默认输入列表就可以排序,例如: list=[1,2,4,5,3]list.sort()print(list)>>>[1,2,3,4,5] 2.sorted() 函数: sorted(iterable, cmp=None, key=None, reverse=False) 其中: iterable -- 可迭代对象。 cmp -- 比较的函数,这个具有两个参数

史上最全的机器学习资料(上)

情到浓时终转凉″ 提交于 2019-12-01 06:00:33
摘要: 机器学习牵涉的编程语言十分之广,包括了MATLAB、Python、Clojure、Ruby等等。为了让开发者更加广泛、深入地了解机器学习,云栖社区组织翻译了GitHub Awesome Machine Learning 资源,涵盖24种编程语言的机器学习的框架、库以及其他相关资料。 机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习牵涉的编程语言十分之广,包括了MATLAB、Julia、R、Perl、Python、Clojure、Ruby等等。 为了让开发者更加广泛、深入地了解机器学习,云栖社区组织翻译了GitHub Awesome Machine Learning 资源,涵盖24种编程语言的机器学习的框架、库以及其他相关资料。 目录 C 通用机器学习 计算机视觉 C++ 计算机视觉 通用机器学习 自然语言处理 序列分析 手势识别 Common Lisp 通用机器学习 Clojure 自然语言处理 通用机器学习 数据分析 /数据可视化 Erlang 通用机器学习 Go 自然语言处理 通用机器学习 数据分析 /数据可视化 Haskell 通用机器学习 Java 自然语言处理