随笔分类 - Python
摘要:
在上一篇博文《Python中的随机采样和概率分布(一)》中,我们介绍了Python中最简单的随机采样函数。接下来我们更进一步,来看看如何从一个概率分布中采样,我们以几个机器学习中最常用的概率分布为例,包括二项(binomial)分布/伯努利(Bernoulli)分布、多项(multinomial)分布、均匀(uniform)分布和狄利克雷(Dirichlet)分布。
阅读全文

摘要:
Python(包括其包Numpy)中包含了了许多概率算法,包括基础的随机采样以及许多经典的概率分布生成。我们这个系列介绍几个在机器学习中常用的概率函数。先来看最基础的功能——随机采样。它包括了random.choice、random.choices、numpy.random.choices等函数
阅读全文

摘要:
Python中的序列迭代有很多陷阱,而这些大都和Python的对象模型和浅拷贝/深拷贝的知识相关。而迭代器返回的是序列中对象的引用,而基础数据类型被二次引用时,一旦副本发生改变,则副本马上被拿去引用一个新对象,此时副本地址就完全和列表元素地址本身独立了。Python中对字典的迭代本质上等值于对列表的迭代,故对于列表的迭代注意事项可以原封不动地搬到字典这里。
阅读全文

摘要:
有时我们会定义只有一个方法(除了"__init__()"之外)的类,而这种类可以通过使用闭包(closure)来替代。闭包是被外层函数包围的内层函数,它能够获取外层函数范围中的变量(即使外层函数已执行完毕)。因此闭包可以保存额外的变量环境,用于在函数调用时使用。一般来说,闭包内层定义的变量对外界来说是完全隔离的,如果想要访问和修改它们,需要编写存取函数(accessor function, 即getter/setter方法),并将它们做为函数属性附加到闭包上来提供对内层变量的访问支持。
阅读全文

摘要:
本章我们讲述匿名函数、回调函数和高阶函数在Python中的各种应用。我们会讨论在Python的回调函数的使用中可能遇到的各种陷阱和难点,同时也会介绍如何functools包中的partial函数来修改回调函数的参数个数,该方法广泛应用于Python的各大库和框架中。
阅读全文

摘要:
本文主要介绍Python参数的一些进阶用法。包括位置参数和关键字参数的概念、接受任意数量的参数、keyword-only参数及其在项目中的运用、可选参数(带默认值的参数)等。并介绍了一些使用中的陷阱和误区,帮助大家写出更pythonic的代码。
阅读全文

摘要:
Python中的任何序列(可迭代的对象)都可以通过赋值操作进行拆分,包括但不限于元组、列表、字符串、文件、迭代器、生成器等。不过如果我们想从可迭代对象中分解出个元素,但如果这个可迭代对象长度超过,则会抛出异常"too many values to unpack"。针对这个问题的解决方案是采用"*"表达式。
阅读全文

摘要:
在Python语言中,要筛选序列中的元素,通常最简单的方法是使用列表推导式(list comprehension)。例如:使用列表推导式的一个潜在缺点就是如果原始输入非常大的话,这么做可能会产生一个庞大的结果。如果这是你需要考虑的问题,那么可以使用生成器表达式通过迭代的方式产生筛选的结果。除了筛选,列表推导式和生成器表达式也具有同时对数据做转换的能力。
阅读全文
