Python Scipy 简介

2018-12-15 python ai

Scipy 是一个用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。

可以有效计算 Numpy 中的矩阵,从而使 Numpy 和 Scipy 可以协同工作,高效解决问题。

scipy logo

stats

在做 ML 的时候经常会遇到一些与概率相关的东西,其实在 scipy.stats 模块中已经提供了相关的一些特性,该模块封装了一些标准的随机变量,包括了连续型 (80多个) 和离散型 (10多个)。

常用方法

连续随机变量的主要公共方法有:

  • rvs, Random VariateS 随机变量,也就是从这个分布中抽一些样本;
  • pdf, Probability Density Function 概率密度函数;
  • cdf, Cumulative Distribution Function 累计分布函数;
  • sf, Survival Function 残存函数(1 - CDF);
  • ppf, Percent Point Function 分位点函数 (CDF 的逆);
  • isf, Inverse Survival Function 逆残存函数 (sf的逆);

可以通过如下方法查看支持的属性。

from scipy import stats

dir(stats.norm)   # 查看正态分布的所有方法和属性

示例

如下使用该模块模拟正态分布的使用,默认使用的是标准正态分布,也就是平均值为 0 ,标准差为 1 的正态分布。

>>> import numpy as np
>>> from scipy import stats

    #----- 使用默认的标准正态分布函数计算累积分布
>>> stats.norm.cdf(0)
0.5
>>> stats.norm.cdf([-1, 0, 1])
array([0.15865525, 0.5, 0.84134475])
>>> norm.cdf(np.array([-1, 0, 1]))
array([0.15865525, 0.5, 0.84134475])

    #----- 设置正态分布参数,loc(location)期望值,scale标准差
>>> x = stats.norm(loc=1.0, scale=2.0)

    #----- 计算随机变量的期望值和方差
>>> print(x.stats())
(array(1.), array(4.))

    #----- 对于正态分布随机取10000个值,并计算其均值和方差
>>> sample = x.rvs(size=10000)
>>> print(np.mean(sample), np.var(sample))
(0.9874473210585618, 4.086386197301687)

    #----- 对随机序列进行拟合,返回与随机取样值最吻合的随机变量参数
>>> print(stats.norm.fit(sample))
(0.9874473210585618, 2.0214811889556845)

参考

Scipy Reference - Statistics scipy.stats