迭代计算

Python学习

梦想与她 提交于 2019-12-02 18:17:37
安装Python 下载链接(3.8) https://www.python.org/ftp/python/3.8.0/python-3.8.0.exe 安装勾选“Add Python 3.8 to PATH” CMD测试安装成功:输入python回车查看安装状态 Python解释器 1、 Cpython C语言开发,官方默认解释器 2、 Ipython 交互上较Cpython有所增强,执行功能与CPython一样 3、 PyPy 执行速度快,采用JIT技术,对代码进行动态编译(非解释) 绝大部分代码都能运行在PyPy上,但可能与Cpython的执行结果不同,注意甄别 https://pypy.readthedocs.io/en/latest/cpython_differences.html 4、 Jython java平台的解释器,可以把Python代码编译成Java字节执行 5、 IronPython 与Jython类似,只不过这个运行在微软.Net上的Python解释器,可以直接把Python代码编译成.Net的字节码 写Python程序 Python交互模式 在命令行模式下敲命令python,然后就进入到Python交互模式,它的提示符是>>> 输入exit()并回车推出Python交互模式 编辑Python代码 使用任意文本编辑器都可以,但不能使用记事本和word

chapter 8 summary

人走茶凉 提交于 2019-12-02 16:36:54
避免“悬挂 else” 映射对象(比如字典)的一个最大好处就是它的搜索操作比类似 if-elif-else 语句或是 for 循环这样的序列查询要快很多. if ...: .... elif ...: .... . . . . else: ... 可以用这个替代: if <> in (): .... else: .... 还可以用字典代替: msgs = {'create': 'create item', 'delete': 'delete item', 'update': 'update item'} default = 'invalid choice... try again!' action = msgs.get(user.cmd, default) 条件表达式(即"三元操作符"):X if C else Y example: x, y = 4, 3 x if x 直接迭代序列要比通过索引迭代快,所以从性能上考虑要直接迭代序列。 enumerate() 函数:enumerate 函数用于遍历序列中的元素以及它们的下标: >>> nameList = ['Donn', 'Shirley', 'Ben','Janice','David', 'Yen', 'Wendy'] >>> for i, eachLee in enumerate(nameList): print '%d %s

Python:range 对象并不是迭代器

时间秒杀一切 提交于 2019-12-02 14:29:45
简评: 迭代器(iterator)是惰性可迭代对象(lazy iterable),range 函数在 Python 3 中是一个惰性的可迭代对象,那么 range 是不是迭代器呢?为什么。 TLNR:Python 3 中的 range 对象(Python 2 中的 xrange 对象)是 lazy 的,但 range 对象却不是迭代器。 是的,这让人很困惑 当谈论 Python 中的迭代器(iterator)和可迭代对象(iterable)时,你很可能会听到有人重复 range 是迭代器的误解。我认为这是非常严重误解, 如果你认为 range 对象是迭代器,那么你关于「迭代器是如何运行」的心智模型还不够清楚。从某种意义上来说,range 和迭代器都是「惰性」的,但它们是以相当不同的方式实现「惰性」的 什么是迭代器(iterator) 在 Python 中,可迭代对象就是你可以迭代的任何东西,而迭代器就是实际迭代的东西。 Iter-ables are able to be iterated over. Iter-ators are the agents that perform the iteration. 可以使用 iter 函数从任何可迭代对象中获取迭代器: <ignore_js_op> 一旦有了迭代器,可以用它做的唯一的事情就是获得它的下一个元素: <ignore_js_op>

11. 函数-三大器

戏子无情 提交于 2019-12-02 12:40:32
一、迭代器 1. 定义 ​ 对于list、string、tuple、dict等这些容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数。iter()是python内置函数。iter()函数会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内的元素。next()也是python内置函数。在没有后续元素时,next()会抛出一个StopIteration异常,通知for语句循环结束。 ​ 迭代器是用来帮助我们记录每次迭代访问到的位置,当我们对迭代器使用next()函数的时候,迭代器会向我们返回它所记录位置的下一个位置的数据。实际上,在使用next()函数的时候,调用的就是迭代器对象的_next_方法(Python3中是对象的_next_方法,Python2中是对象的next()方法)。所以,我们要想构造一个迭代器,就要实现它的_next_方法。但这还不够,python要求迭代器本身也是可迭代的,所以我们还要为迭代器实现_iter_方法,而_iter_方法要返回一个迭代器,迭代器自身正是一个迭代器,所以迭代器的_iter_方法返回自身self即可 2. 一些术语 迭代器协议:对象需要提供next()方法,它要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代。 可迭代对象:实现了迭代器协议对象。list

迭代器和生成器

旧时模样 提交于 2019-12-02 12:06:05
迭代器(iterator) 迭代器是在python2.2中被加入的,它为类序列对象提供了一个类序列的接口。有了迭代器可以迭代一个不是序列的对象,因为他表现出了序列的行为。 什么迭代器呢? 迭代器的实质是实现了next()方法的对象,常见的元组、列表、字典都是迭代器。 迭代器中重点关注两种方法: iter方法:返回迭代器自身。可以通过python内建函数iter()调用。 next方法:当next方法被调用的时候,迭代器会返回它的下一个值,如果next方法被调用,但迭代器没有值可以返回,就会引发一个StopIteration异常。该方法可以通过 python 内建函数next()调用。 举例 内建函数iter()可以从可迭代对象中获得迭代器。 >>> it = iter([1,2,3]) >>> next(it) 1 >>> next(it) 2 >>> next(it) 3 >>> next(it) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> 迭代器是一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,任何实现了__iter__和__next__()(python2中实现next())方法的对象都是迭代器。 __iter_

python迭代器、生成器和装饰器

对着背影说爱祢 提交于 2019-12-02 12:01:56
文章目录 生成器 生成器表达式(generator expression) 通过使用yield关键字定义 生成器并行 前戏 高潮 迭代器 迭代器概述 iter()函数 创建迭代器 创建一个迭代器(类) 内置迭代器工具 count无限迭代器 cycle 无限迭代器,从一个有限序列中生成无限序列: itertools的子模块 islice 控制无限迭代器输出的方式 装饰器 高阶函数 嵌套函数 高阶函数+嵌套函数 = 装饰器 类装饰器 带参数的decorator 实例---登录认证 生成器 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。 要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator: 生成器表达式(generator expression) L = [ x + 1 for x in range ( 10 )

CORDIC算法基本原理

▼魔方 西西 提交于 2019-12-02 08:40:31
引言 某些复杂的计算,例如三角函数和除法运算等涉及到大量浮点运算的计算任务,是数字电路天生的瓶颈所在。在某些场景下,可以使用查找表方法或者采用级数展开的方法来实现三角函数等运算功能。但是,这两种方法可能会占用大量的存储资源和硬件乘法计算单元,而想要节省资源,就要以牺牲精度为代价。 相对于前两种方法,CORDIC算法具有很大优势。首先,在计算过程中,它不使用任何的硬件乘法器单元,所涉及的只有移位和累加。然后,对于存储资源的占用,它仅仅需要少量的数据需要预先存储。在实际的数字电路设计中,可以将其设计为流水线方式或者是迭代复用方式,以提高运算速度或者是减少资源占用。 一、矢量旋转公式 CORDIC算法最最基本理论基础,是矢量旋转公式。即矢量 A ( x , y ) A\left( {x,y} \right) A ( x , y ) 顺时针旋转 θ \theta θ 之后,得到的矢量 ( x ′ , y ′ ) \left( {x',y'} \right) ( x ′ , y ′ ) 可以表示为 (式1) : x ′ = x cos ⁡ θ + y sin ⁡ θ , y ′ = y cos ⁡ θ − x sin ⁡ θ . \begin{array}{l} x' = x\cos \theta + y\sin \theta ,\\ y' = y\cos \theta - x\sin

感知机原理

ε祈祈猫儿з 提交于 2019-12-02 06:47:27
感知机可以说是最古老的分类方法之一,早在1957年就已经提出。从今天来看它的分类模型在大多数时候泛化能力不强,但是它的原理却值得好好研究。因为研究透了感知机模型,学习支持向量机的话会降低不少难度。同时如果研究透了感知机模型,再学习神经网络,深度学习,也是一个很好的起点。 1.感知机模型 感知机的思想很简单,比如我们在一个平台上有很多的男孩女孩,感知机的模型就是尝试找到一条直线,能够把所有的男孩和女孩隔离开。放到三维空间或者更高维的空间,感知机的模型就是尝试找到一个超平面,能够把所有的二元类别隔离开,如下图这样。 当然你可能会想,如果我们找不到这么一条直线的话怎么办?找不到的话那就意味着类别线性不可分,也就意味着感知机模型不适合你的数据的分类。使用感知机一个最大的前提,就是数据是线性可分的。这严重限制了感知机的使用场景。它的分类竞争对手在面对不可分的情况时,比如支持向量机可以让数据在高维可分,神经网络可以通过激活函数和增加隐藏层来让数据可分。支持向量机的分类方法如下图所示 用数学的语言来说,如果我们有m个样本,每个样本对应于n维特征和一个二元类别输出,如下: ( x 1 ( 0 ) , x 2 ( 0 ) . . . x n ( 0 ) , y 0 ) , ( x 1 ( 1 ) , x 2 ( 1 ) . . . x n ( 1 ) , y 1 ) . . . ( x 1 ( m

[最优化理论与技术]一维搜索

限于喜欢 提交于 2019-12-02 06:43:20
目录 一维搜索 一维最优化 一般迭代算法 下降迭代算法 搜索步长确定方法 收敛速度 黄金分割法 进退法 ( 二次插值法 ) 抛物线插值法 三次插值法 一维搜索 一维最优化 一般迭代算法 初始点 \(x^0\) 按照某种规则 \(A\) 产生下一个迭代点 \(x^{k+1}=A(x^k)\) 点列 \({x^k}\) 收敛于最优解 \(x^*\) 下降迭代算法 初始点 \(x^0\) 按照某种规则 \(A\) 产生下一个迭代点 \(x^{k+1}=A(x^k)\) \(f(x^0)>f(x^1)>...>f(x^k)>...\) 下降迭代算法步骤: 给出初始点 \(x^0\) ,令 \(k=0\) 按照某种规则确定下降搜索方向 \(d^k\) 按照某种规则确定搜索步长 \(\lambda_k\) ,使得 \[ f\left(x^{k}+\lambda_{k} d^{k}\right)<f\left(x^{k}\right) \] 令 \(x^{k+1}=x^{k}+\lambda_{k} d^{k}\) 判断 \(x^k\) 是否满足停止条件 搜索步长确定方法 \[ f\left(x^{k}+\lambda_{k} d^{k}\right)=\min _{\lambda} f\left(x^{k}+\lambda d^{k}\right) \] 称 \(\lambda_k\)

迭代器与生成器

佐手、 提交于 2019-12-02 06:04:45
一、迭代器的特征 迭代器有一个next()方法,每次调用时会返回一个对象,该对象的结构为{value:xxx,done:true},其中value表示下次应该返回的值,done表示是否还有值可提供。 当没有值可提供时,done为true,如果迭代器在迭代结束时使用了return xxx,则value为xxx,否则为undefined。 function createIterator(items) { var i = 0 ; return { next: function () { var done = (i >= items.length); var value = !done ? items[i ] : undefined; return { done: done, value: value }; } }; } var iterator = createIterator([1, 2, 3 ]); console.log(iterator.next()); // "{ value: 1, done: false }" console.log(iterator.next()); // "{ value: 2, done: false }" console.log(iterator.next()); // "{ value: 3, done: false }" console.log