迭代计算

方差迭代计算公式

匿名 (未验证) 提交于 2019-12-02 23:34:01
方差迭代计算过程推导 术语约定 递推公式 过程推导 术语约定 (1) E n = 1 n ∑ i = 1 n x i E_n =\frac{1}{n} \sum_{i=1}^{n}x_i \tag{1} E n = n 1 i = 1 ∑ n x i ( 1 ) (2) F ( n ) = ∑ i = 1 n ( x 2 E n ) F(n) = \sum_{i=1}^{n}{(x^2-E_n)} \tag{2} F ( n ) = i = 1 ∑ n ( x 2 E n ) ( 2 ) (3) V ( n ) = 1 n ∑ i = 1 n ( x 2 E n ) = F ( n ) n V(n) = \frac{1}{n}\sum_{i=1}^{n}{(x^2-E_n)} = \frac{F(n)}{n} \tag{3} V ( n ) = n 1 i = 1 ∑ n ( x 2 E n ) = n F ( n ) ( 3 ) 递推公式 F ( n ) = ∑ i = 1 n ( x i 2 E n ) = ∑ i = 1 n x i 2 2 ∑ i = 1 n x i E n + n E n 2 由 E n = 1 n ∑ i = 1 n x i 可 导 出 , n E n = ∑ i = 1 n x i , 故 F(n) = \sum_{i=1}^ {n}{(x_i^ 2

python问题

匿名 (未验证) 提交于 2019-12-02 22:56:40
修饰器是什么? 有种设计模式叫修饰器模式, 它可以在不修改目标函数代码的前提下, 在目标函数执行前后增加一些额外功能 迭代器? 迭代,顾名思义就是重复做一些事很多次(就现在循环中做的那样)。 迭代器是实现了__next__()方法的对象(这个方法在调用时不需要任何参数),它是访问可迭代序列的一种方式,通常其从序列的第一个元素开始访问,直到所有的元素都被访问才结束。 [迭代器的优点]: 使用迭代器不要求事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后元素可以不存在或者被销毁。因此迭代器适合遍历一些数量巨大甚至无限的序列。 生成器? 延迟操作。也就是在需要的时候才产生结果,不是立即产生结果。 >生成器是只能遍历一次的。 >生成器是一类特殊的迭代器。 yield 元类? 元类就是那个帮你创建类的"家伙"。 为了创建对象(实体),你定义了类,是不是? 而在python中,类也是对象,这样的对象就是通过元类来创建的。 元类就是"类的类"。 上文中提到的type事实上就是一个元类,在python中,所有的类都是使用type创建的 原文:https://www.cnblogs.com/jiaoyang77/p/9248963.html

Python基础-12

匿名 (未验证) 提交于 2019-12-02 22:54:36
day11回顾: 变量 局部变量 全局变量 globals() / locals() 用来获取全局变量和局部变量的字典 函数名是变量 def xxx(....): pass 一个函数可以作为实参传入另一个函数 def fx(fn, L): pass fx(max, [1,2,3]) 函数可以作为另一个函数的返回值 def fx(): def hello(): print("hello world") return hello fh = fx() fh() # 调用hello这个函数 python 的四个作用域: L E G B 局部 外部嵌套函数作用域 全局 内建作用域 global 语句 nonlocal 语句 day12笔记: lambda 表达式(又名匿名函数表达式) 作用: 创建一个匿名函数对象 同def类似,但不提供函数名 语法: lambda [形参1, 形参2, ...] : 表达式 示例: def myadd(x, y): return x + y 可以改写为: myadd = lambda x, y: x + y print(myadd(100, 200)) print(myadd("ABC", "100")) 语法说明: 1. lambda 只是一个表达式,它用来创建一个函数对象 2. 当lambda表达式调用时,先执行冒号后的表达式,并返回表达式的结果的引用

Python 中的迭代器和生成器

匿名 (未验证) 提交于 2019-12-02 22:54:36
迭代器 每次可以返回一个对象元素的对象,例如返回一个列表。我们到目前为止使用的很多内置函数(例如 enumerate)都会返回一个迭代器。 是一种表示数据流的对象。这与列表不同,列表是可迭代对象,但不是迭代器,因为它不是数据流。 生成器 是使用函数创建迭代器的简单方式。也可以使用类定义迭代器 下面是一个叫做 my_range 的生成器函数,它会生成一个从 0 到 (x - 1) 的数字流: def my_range (x) : i = 0 while i < x: yield i i += 1 该函数使用了 yield 而不是关键字 return。这样使函数能够一次返回一个值,并且每次被调用时都从停下的位置继续。关键字 yield 是将生成器与普通函数区分开来的依据。 因为上述代码会返回一个迭代器,因此我们可以将其转换为列表或用 for 循环遍历它,以查看其内容。例如,下面的代码: for x in my_range( 5 ): print(x) 输出如下: 0 1 2 3 4 为何要使用生成器? 生成器是构建迭代器的 “懒惰” 方式。当内存不够存储完整实现的列表时,或者计算每个列表元素的代价很高,你希望尽量推迟计算时,就可以使用生成器。但是这些元素只能遍历一次。 由于使用生成器是一次处理一个数据,在内存和存储的需求上会比使用list方式直接全部生成再存储节省很多资源。由此区别

Python函数编程――迭代器

匿名 (未验证) 提交于 2019-12-02 22:51:30
我们已经知道,可以直接作用于 for 循环的数据类型有以下几种: 1、类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等; 2、一类是 generator ,包括生成器和带 yield 的generator function。 这些可以直接作用于 for 循环的对象统称为 可迭代对象:Iterable,可迭代的意思就是可遍历、可循环。 可以使用 isinstance() 判断一个对象是否是 Iterable 对象: >>> from collections import Iterable >>> isinstance ([], Iterable ) True >>> isinstance ({}, Iterable ) True >>> isinstance ( 'abc' , Iterable ) True >>> isinstance (( x for x in range ( 10 )), Iterable ) True >>> isinstance ( 100 , Iterable ) False 而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

python内置方法

匿名 (未验证) 提交于 2019-12-02 22:51:30
数据类型的常用操作和内置方法 整型,浮点型:加减乘除... bool类型:not str: 1\ 按索引取值 str[索引] 2 切片 str[起始索引:终止索引:步长] 顾头不顾尾 str[起始索引:] 默认取到最后一个 str[:终止索引] 默认从第一个开始取 str[:] 第一个到最后一个 3 遍历 for i in str 4 +,* 5 格式化: "...%s,%s,%d"%(值1,值2,值3) list的内置方法:11个 list.append(元素) list.pop(索引/默认为-1) 根据索引剔除元素 list.remove(元素) 根据值剔除元素 list.clear() 清空列表 list.count(元素) 统计列表中元素的个数 list.copy() 浅拷贝 若要深拷贝需要copy模块 list.extend(可迭代对象) 通过可别迭对象扩展列表 list.index(元素,起始索引,终止索引) 查找元素,返回找到的第一个索引 list.insert(索引,元素) 指定索引插入元素 list.reverse() 反序 list.sort(key=函数,reverse=bool值) 根据自定义函数的返回值排序 str的内置方法:33个(略去一些不常用的) str.endswith(字符串)/startswith(字符串) 判断str是否以字符串结尾/开头

看一遍就懂的python生成器

匿名 (未验证) 提交于 2019-12-02 22:51:30
首先理解三个名词: 可迭代对象(Iterable) 迭代器(Iterator) 迭代(Iteration) 可迭代对象(Iterable):Python中任意的对象,只要它定义了可以返回一个迭代器的__iter__方法,或者定义了可以支持下标索引的__getitem__方法(这些双下划线方法会在其他章节中全面解释),那么它就是一个可迭代对象。简单说,可迭代对象就是能提供迭代器的任意对象。 迭代器(Iterator):任意对象,只要定义了next(Python2) 或者__next__方法,它就是一个迭代器。 迭代(Iteration):用简单的话讲,它就是从某个地方(比如一个列表)取出一个元素的过程。当我们使用一个循环来遍历某个东西时,这个过程本身就叫迭代。 生成器(Generators) 生成器也是一种迭代器,但是你只能对其迭代一次。这是因为它们并没有把所有的值存在内存中,而是在运行时生成值。你通过遍历来使用它们,要么用一个“for”循环,要么将它们传递给任意可以进行迭代的函数和结构。大多数时候生成器是以函数来实现的。然而,它们并不返回一个值,而是yield(暂且译作“生出”)一个值。这里有个生成器函数的简单例子: def generator_function(): for i in range(6): yield i for item in generator_function

Python : 迭代器和生成器

匿名 (未验证) 提交于 2019-12-02 22:51:30
问: 将列表生成式中[]改成() 之后数据结构是否改变? 答案:是,从列表变为生成器. L = [x x for x in range(10)] L [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] g = (x x for x in range(10)) g <generator object at 0x0000028F8B774200> 通过列表生成式,可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含百万元素的列表,不仅是占用很大的内存空间,如:我们只需要访问前面的几个元素,后面大部分元素所占的空间都是浪费的。因此,没有必要创建完整的列表(节省大量内存空间)。在Python中,我们可以采用生成器:边循环,边计算的机制―>generator 文章来源: https://blog.csdn.net/weixin_44523387/article/details/91608954

【转载】【收藏】机器学习与深度学习核心知识点总结

耗尽温柔 提交于 2019-12-02 19:02:56
原文地址: https://cloud.tencent.com/developer/article/1526902 数学 1.列举常用的最优化方法 梯度下降法 牛顿法 拟牛顿法 坐标下降法 梯度下降法的改进型如AdaDelta,AdaGrad,Adam,NAG等。 2.梯度下降法的关键点 梯度下降法沿着梯度的反方向进行搜索,利用了函数的一阶导数信息。梯度下降法的迭代公式为: 根据函数的一阶泰勒展开,在负梯度方向,函数值是下降的。只要学习率设置的足够小,并且没有到达梯度为0的点处,每次迭代时函数值一定会下降。需要设置学习率为一个非常小的正数的原因是要保证迭代之后的x k +1位于迭代之前的值x k 的邻域内,从而可以忽略泰勒展开中的高次项,保证迭代时函数值下降。 梯度下降法只能保证找到梯度为0的点,不能保证找到极小值点。迭代终止的判定依据是梯度值充分接近于0,或者达到最大指定迭代次数。 梯度下降法在机器学习中应用广泛,尤其是在深度学习中。AdaDelta,AdaGrad,Adam,NAG等改进的梯度下降法都是用梯度构造更新项,区别在于更新项的构造方式不同。对梯度下降法更全面的介绍可以阅读SIGAI之前的文章“ 理解梯度下降法 ”。 3.牛顿法的关键点 牛顿法利用了函数的一阶和二阶导数信息,直接寻找梯度为0的点。牛顿法的迭代公式为: 其中H为Hessian矩阵,g为梯度向量

STL源码剖析——算法#1 内存处理基本工具

落爺英雄遲暮 提交于 2019-12-02 18:41:39
  我们在学习序列式容器时,我们经常会遇到这三个函数:uninitialized_copy、uninitialized_fill、uninitialized_fill_n。在那时我们只是仅仅知道这些函数的功能,至于它们是如何实现的,我们并没有深究。在这节,我们花点时间摘下这几个函数的面具,看看它们不为人知的那一面。 uninitialized_copy   函数签名: 1 template <class InputIterator, class ForwardIterator> 2 inline ForwardIterator 3 uninitialized_copy(InputIterator first, InputIterator last, 4 ForwardIterator result)   该函数一般用于在内存配置与对象构造分离的情况,例如vector,vector一般配置比所需元素个数更大的空间,那么在备用空间中放入新元素,就是uninitialized_copy该做的事。换句话说,如果作为输出目的地的 [ result, result+(last-first) ) 范围内的每一个迭代器都指向未初始化的区域,则uninitialized_copy() 会使用复制构造函数,把来自 [ first, last ) 范围的每一个对象产生一份复制品,放进输出范围中