
python
五道口纳什
wx公众号/B站:五道口纳什
展开
-
PEP8——Python代码规范
统一且设计良好的代码规范,是一种优良的编程习惯。PyCharm这一Python IDE使用的正是著名的PEP8代码规范,我们会看到,当有不符合规范的代码出现时,编译器会以灰色下划波浪线给出相关提示,本文即告诉你如何写出没有灰色警告线的至少看上去很美的代码样式。 缩进(indentation) 使用四个空格表示每个缩进级别。Yes# 使用开分隔符(opening delimiter)进行原创 2015-11-12 13:16:32 · 5808 阅读 · 0 评论 -
Python 基础——排列组合的实现
考虑这样一个问题,给定一个矩阵(多维数组,numpy.ndarray()),如何shuffle这个矩阵(也就是对其行进行全排列),如何随机地选择其中的k行,这叫组合,实现一种某一维度空间的切片。例如五列中选三列(全部三列的排列数),便从原有的五维空间中降维到三维空间,因为是全部的排列数,故不会漏掉任何一种可能性。原创 2015-10-29 17:20:08 · 37312 阅读 · 1 评论 -
Python 基础——一张图告诉你PyCharm如何进行断点调试
编辑器不等于IDE(集成开发环境),开发python程序,不是只有一种print()打印输出调试。 术业有专攻,于人如此,于一个软件也是如此。让专业的软件做专业的事。 以上两点得出的结论:PyCharm原创 2015-10-30 17:16:42 · 28315 阅读 · 4 评论 -
Python 基础 —— Python程序员常犯的那些错误
python包含大量简洁而优雅的编程范式,若使用得当,将大大简化代码。原创 2015-10-30 13:06:23 · 1325 阅读 · 1 评论 -
python技巧——使用list comprehension生成素数(prime number)
使用list comprehension的目的是构建construct list使用一次list comprehension,构建一个非素数再使用一次list comprehension,获得素数>>> import math >>> noprimes = [j for i in range(2, int(math.sqrt(100))) for j in range(2*i, 100, i)原创 2015-11-24 20:47:35 · 3564 阅读 · 0 评论 -
scan——Theano中循环的实现
在开始scan函数的设计之前,我们从一个实例出发,首先来看,一个循环需要必备哪些成分:简单的循环累积相乘,计算AkA^k,使用numpy,代码如下。def power(A, k): result = 1 for i in range(k): result *= A return result计算AkA^k的过程中,我们需要对其中三个主要成分进行操纵,恒定量A原创 2015-12-10 22:59:47 · 3872 阅读 · 2 评论 -
python技巧——list comprehension vs map
>>>words = 'The quick brown fox jumps over the lazy dog'.split()>>>stuff = [[w.upper(), w.lower(), len(w)] for w in words]>>>stuff2 = map([w.upper(), w.lower(), len(w)], words)两者可完成相似的功能,在list compre原创 2015-11-24 21:17:00 · 1321 阅读 · 0 评论 -
Python基础——positional argument vs keyword argument
python强大的类型推导,有时也会带来一些副作用,比如有时编译器会报如下错误:TypeError: Function takes at most 1 positional arguments (2 given)# 函数最多接受一个位置参数,却提供了两个所谓positional argument位置参数,是指用相对位置指代参数。关键字参数(keyword argument),见名知意使用关键字指代原创 2015-11-25 17:22:03 · 50140 阅读 · 1 评论 -
数论及Python实践
二项式系数二项式系数的定义式: (nk)=n!k!(n−k)!\begin{equation}\begin{pmatrix}n\\k\end{pmatrix}=\frac{n!}{k!(n-k)!}\end{equation}(nk)=(n−1k)+(n−1k−1)\begin{equation}\begin{pmatrix}n\\k\end{pmatrix}=\begin{pmatr原创 2015-12-12 21:45:28 · 1980 阅读 · 0 评论 -
二项分布的实现(np.random.binomial)
二项分布(binomial distribution): P(N)=(nN)pN(1−p)n−NP(N)=\begin{pmatrix}n\\N\end{pmatrix}p^N(1-p)^{n-N} numpy给出的api是:numpy.random.RandomState.binomial(n, p, size=None)表示对一个二项分布进行采样(size表示采样的次数,draw sa原创 2015-12-04 11:30:29 · 32148 阅读 · 2 评论 -
Python基础——zip
>>> x = range(0, 27)>>> y = [chr(x) for x in range(97, 123)]>>> [(i, j) for i in x for j in y](1, 'a')(1, 'b')...(2, 'a')(2, 'b')...(26, 'x')(26, 'y')(26, 'z')[(i, j) for i in x for j in y] 也原创 2015-11-26 15:39:08 · 1747 阅读 · 0 评论 -
Python基础——min/max与np.argmin/np.argmax
这里应该是拿min/max(更适合处理可迭代对象,可选的参数是key=func)与np.min/np.max(可适合处理numpy.ndarray对象,可选的参数是axis=0或者1)作比较,只不过np.argmin/np.argmax的用法与np.min/np.max相似,这里就不进行更正了。首先min/max与np.argmin/np.argmax函数的功能不同前者返回值,后者返回最值所在的索原创 2015-11-25 23:37:17 · 44901 阅读 · 0 评论 -
从一个例子看频率学派与贝叶斯学派的不同(Python)
考虑如下的一个游戏场景:setup: Alice and Bob enter a room. Behind a curtain there is a billiard table, which they cannot see, but their friend Carol can. Carol rolls a ball down the table, and marks where it lan原创 2015-12-21 08:26:33 · 2630 阅读 · 3 评论 -
Huber Loss function
Huber loss是为了增强平方误差损失函数(squared loss function)对噪声(或叫离群点,outliers)的鲁棒性提出的。DefinitionLδ(a)=⎧⎩⎨⎪⎪⎪⎪12a2,δ⋅(|a|−12δ),for |a|≤δ,otherwise.\begin{split}L_\delta(a)=\left \{\begin{array}{ll}\frac12a^2,&\t原创 2015-12-29 15:29:52 · 24576 阅读 · 2 评论 -
Python基础——NaN(Not a Number)
inf 与 naninf不是nan,inf-inf或者-inf+inf是nan。inf是∞\infty,一个比其他所有值都大的值。>>> 2*float('inf')>>> inf>>> -2*float('inf')>>> -inf>>> float('inf') == float('inf')>>> True>>> float('inf') - float('inf')nan判断一原创 2015-11-27 21:35:30 · 97546 阅读 · 1 评论 -
线性拟合——从最大似然估计到平方误差到huber loss
考虑这样一些数据:x = np.array([0, 3, 9, 14, 15, 19, 20, 21, 30, 35, 40, 41, 42, 43, 54, 56, 67, 69, 72, 88]) # x # x_iy = np原创 2015-12-28 23:09:23 · 13606 阅读 · 0 评论 -
线性插值——如何根据两点确定一条线段
计算机能画一条线段(数学意义上)吗?并不能。不管多短的一条线段,都包含实数集上的无数个点,计算机能做的是尽可能多地采样,描更多的点,让人眼难以看出其中的不连续性。已知 x,yx,y 分别为坐标轴上的两点,下式为采样公式, x′=(1−p)⋅x+p⋅y,p∈[0,1]x'=(1-p)\cdot x+p\cdot y,\quad p\in [0, 1]对 pp在整个 [0,1][0, 1]闭区间上原创 2016-01-08 13:06:04 · 6064 阅读 · 0 评论 -
numpy中多维数组的轴(axis)
多维数组的轴(axis=)是和该数组的size(或者shape)的元素是相对应的;>>> np.random.seed(123)>>> X = np.random.randint(0, 5, [3, 2, 2])>>> print(X)[[[5 2] [4 2]] [[1 3] [2 3]] [[1 1] [0 1]]]>>> X.sum(axis=0)array([[7, 6],原创 2016-01-14 08:49:11 · 22411 阅读 · 0 评论 -
Python基础——@staticmethod与@classmethod
@staticmethod的用法使用@staticmethod声明的成员函数具有C++类的静态成员函数的相同的用法,既可以被对象调用,更可以被类本身调用,因为静态成员函数属于类本身。 在python类的定义中,在成员函数的参数列表中如果不指定第一个参数为self(也即c++中的this指针),标识着该方法属于类的方法,但与@staticmethod的不同之处在于,不可被对象调用。class Dog原创 2015-11-27 17:46:41 · 1200 阅读 · 0 评论 -
重温二项分布
实现我们在概率论与数理统计课上学过的二项(binomial)分布,属于一种离散型随机变量(discrete random variable),其概率质量函数(probability mass function)为:f(k;n,k)=Pr(K=k)=(nk)pk(1−p)n−kf(k;n,k)=Pr(K=k)=\binom n k p^k(1-p)^{n-k}其E[X]=np,Var[X]=np(1−原创 2015-12-16 16:58:18 · 2026 阅读 · 0 评论 -
Beta函数与Gamma函数及其与Beta分布的关系
相关函数在scipy.specialimport scipy.special as ssss.beta(x1, x2)相关分布(概率密度)在scipy.statsimport scipy.stats as stss.beta(a, b) # 随机变量β\beta Function:B(x,y)=∫10tx−1(1−t)y−1dtB(x, y)=\int_0^1t^{x-1}原创 2015-12-20 13:22:19 · 19961 阅读 · 0 评论 -
Python技巧——根据函数名获得函数对象
有时我们需要将一个文件的信息(类、函数及变量)保存到文件,我们不能直接保存函数对象,而是将其转化为fn.__name__,问题来了,当我们想通过读取文件的形式重新配置这些类、函数时,该如何把这些字符串转换为对应的函数对象呢?# test.pyimport sysdef fn(): print('hello world')func_name = fn.__name__fn_obj =原创 2015-11-30 12:38:23 · 8852 阅读 · 0 评论 -
仿射变换(Affine transformation)与python实践
仿射变换,又称仿射映射,是指在几何张,一个向量空间(vector space)进行一次线性变换(linear transformation)并拼上一个平移(Translation ),其矩阵表达形式(matrix formal)为: y⃗ m×1=Am×nx⃗ n×1+b⃗ m×1\vec{y}_{m\times 1}=A_{m\times n}\vec{x}_{n\times 1}+\vec{b原创 2015-12-30 11:57:28 · 16050 阅读 · 0 评论 -
创建对称矩阵(numpy)
对称(实对称)矩阵也即:XT=XX^T=Xstep 1:创建一个方阵>>> import numpy as np>>> X = np.random.rand(5**2).reshape(5, 5)>>> Xarray([[ 0.26984148, 0.25408384, 0.12428487, 0.0194565 , 0.91287708], [ 0.31837673,原创 2015-12-18 18:16:30 · 15124 阅读 · 1 评论 -
emcee——Quickstart
emcee是一个强大的、易上手的python第三方的库,使用基于蒙特卡洛的算法实现对贝叶斯参数的估计(Bayesian Parameter Estimation)。如何对一个多维高斯密度函数进行采样p(x⃗ )∝exp[−12(x⃗ −μ⃗ )TΣ−1(x⃗ −μ⃗ )]p(\vec{x})\propto \exp\left [ -\frac12(\vec x-\vec \mu)^T\Sigma^原创 2016-01-01 10:50:31 · 5557 阅读 · 0 评论 -
Python基础——yield的使用与解释
要了解yield的作用,首先需明白什么是生成器(type为generator),在了解生成器之前需要了解什么是可迭代对象(iterables,可迭代序列):list comprehension使用list comprehension创建一个list,而list是一种可迭代对象:>>> for i in [n**2 for n in range(n) if n%2==0]: print原创 2015-12-17 15:45:19 · 1653 阅读 · 0 评论 -
线性拟合——离群点outliers的处理
问题考虑如下的数据集:x,yx,y 是观测到的变量(observed variables),yy的误差存放在数组 ee 中:x = np.array([ 0, 3, 9, 14, 15, 19, 20, 21, 30, 35, 40, 41, 42, 43, 54, 56, 67, 69, 72, 88])y = np.array([33, 68, 34, 34,原创 2016-01-01 17:41:21 · 21900 阅读 · 2 评论 -
Python技巧——list comprehension 与 functools.reduce
Guido(python的设计者)说,每当我看到reduce函数作用于一个non-trivial function(函数功能不那么直观的函数),我就想问自己,我当初为什么要设计如此蹩脚的内置函数,以至于我需要拿出纸和笔勾勾画画才能搞明白reduce函数的真正意图,而且效率不见得比list comprehension高。所以,他一怒之下,在python3中,将reduce贬为二等公民,也即,从内置函数原创 2015-12-01 12:02:41 · 1998 阅读 · 0 评论 -
Python基础——文件拷贝(从手动实现到shutil的使用)
def copyfileobj(fsrc, fdst, length=16*1024): while 1: buf = fsrc.read(length) if not buf: break; fdst.write(buf)原创 2015-12-01 13:01:04 · 1250 阅读 · 0 评论 -
Python基础——numpy.ndarray一维数组与多维数组
shape为(3, 1)(表多维数组)与shape为(3, )(表一维数组)用法上有很大的不同>>> x = np.random.randn(3)>>> xarray([ 0.53150381, -0.45205789, -0.6655509 ])>>> x.shape(3,)>>> y = np.random.randn(3, 1)>>> yarray([[ 0.69918993],原创 2015-12-01 12:28:52 · 12484 阅读 · 0 评论 -
happy 2016, happy 11111100000
我们首先来看微博上流传甚广的一幅图片: 自然我们可以预定: 210+29+28+27+26+25+24==2016+242032\begin{split}2^{10}+2^9+2^8+2^7+2^6+2^5+2^4=&2016+2^4\\=&2032\end{split} 210+29+28+27+26+25+242^{10}+2^9+2^8+2^7+2^6+2^5+2^4用原创 2016-01-02 10:21:16 · 1136 阅读 · 0 评论 -
convenient functions in numpy
import numpy as npimport scipy.stats as stnp.random.rand(d0, d1, …, dn)仅表示服从∼U[0,1]\sim U[0, 1](0-1均匀分布)的随机变量,参数控制维度。>>> np.random.rand(2, 3)array([[ 0.33265357, 0.03494197, 0.02490148], [ 0原创 2016-01-03 22:08:56 · 1286 阅读 · 0 评论 -
机器学习常用数学公式
reconstruction errorx→y→zx\rightarrow y\rightarrow z,yy是被污染的xx,zz是从yy中试图对xx进行的重构。如何度量重构的好坏,此时就要用到重构误差,也即reconstruction error。重构误差可通过多种方式进行度量,度量方式的选择取决于给定映射(也即编码code)下关于输入的分布的假设。传统的平方误差:L(x,z)=∥x−z∥2L(原创 2015-12-03 13:03:25 · 7328 阅读 · 0 评论 -
从np.random.normal()到正态分布的拟合
先看伟大的高斯分布(Gaussian Distribution)的概率密度函数(probability density function):f(x)=12π−−√σexp(−(x−μ)22σ2)f(x)=\frac1{\sqrt{2\pi}\sigma}\exp(-\frac{(x-\mu)^2}{2\sigma^2})对应于numpy中:numpy.random.normal(loc=0.0, s原创 2015-12-03 17:20:01 · 162008 阅读 · 12 评论 -
基本采样算法及Python实现
本文代码见于 code时不时地我们会在机器学习乃至深度神经网络中瞥见采样算法的身影。本文只关键简单的入门级的采样算法及其Python实现。单纯随机抽样(simple random sampling)将调查总体全部观察单位进行编号,再用抽签法随机抽取(不放回)部分观察单位组成样本。(CknC_n^k)优点:操作简单缺点:总体较大时,难以编号。import randomdef loadDataset原创 2015-12-15 17:18:21 · 11259 阅读 · 0 评论 -
频率主义(Frequentism)与贝叶斯主义(Bayesianism)的哲学辨异与实践(Python仿真)
对概率的认识两者的根本不同在于对概率的认识:frequentists probabilities are fundamentally related to frequencies of events. Bayesians, probabilities are fundamentally related to our own knowledge about an event.频率We’l原创 2015-12-18 09:48:21 · 4257 阅读 · 0 评论 -
最小二乘法进行曲线拟合(Python)
本文不手动实现最小二乘,调用scipy库中实现好的相关优化函数。考虑如下的含有4个参数的函数式:f(x)=A−D1+(x/C)B+Df(x)=\frac{A-D}{1+(x/C)^B}+D构造数据import numpy as npfrom scipy import optimizeimport matplotlib.pyplot as pltdef logistic4(x, A, B, C,原创 2015-12-19 17:07:16 · 24460 阅读 · 4 评论 -
Bootstrap采样方法的python实现
本文只考虑相对简单的一维的情况:import numpy as npdef bootstrap(data, num_samples, statistics, alpha): n = len(data) idx = np.random.randint(0, n, size=(num_samples, n)) samples = data[idx] stat = np.s原创 2015-12-19 17:48:56 · 14593 阅读 · 5 评论 -
贝叶斯分析——从数值积分到MCMC
Analytical solutionNumerical integrationOne simple way of numerical integration is to estimate the values on a grid of values for θ\theta. To calculate the posterior, we find the prior and the likelhoo原创 2016-01-05 22:07:43 · 2871 阅读 · 2 评论 -
MCMC(Markov Chain Monte Carlo)的理解与实践(Python)
Markov Chain Monte Carlo (MCMC) methods are a class of algorithms for sampling from a probability distribution based on constructing a Markov chain that has the desired distribution as its stationary d原创 2016-01-03 20:56:01 · 17944 阅读 · 4 评论