scipy_scipy安装 - CSDN
精华内容
参与话题
  • Scipy -- 使用总结

    千次阅读 2019-05-07 19:51:09
    Scipy 是世界上著名的Python开源科学计算库,建立在Numpy之上。它增加的功能包括数值积分、最优化、统计和一些专用函数。 Scipy函数库在Numpy的基础上增加了众多的数学、科学以及工程计算中常用的库函数。例如线性...

    Scipy 是世界上著名的Python开源科学计算库,建立在Numpy之上。它增加的功能包括数值积分、最优化、统计和一些专用函数。
    Scipy函数库在Numpy的基础上增加了众多的数学、科学以及工程计算中常用的库函数。例如线性代数、常微分方程数值求解、信号处理、图像处理、稀疏矩阵等等。

    Scipy.io进行mat文件的写入与读取

    from scipy import io
    io.savemat('1.mat',{'array':1}) # io.savemat(file_name,mdict)
    io.loadmat('1.mat')  # io.loadmat(file_name)
    

    利用Scipy的scipy.stats包中的统计函数实现分析随机数的功能

    Stats提供了产生连续性分布的函数:

    • 均匀分布(uniform)
    • 正态分布(norm)
    • 贝塔分布(beta)
    • 离散分布
    • 伯努利分布(bernoulli)
    • 几何分布(geom)
    • 泊松分布(poisson)
    一、生成随机数
    1. stats.norm
      x=stats.norm.rvs(size=20) # 生成20个正态分布随机数
    2. stats.uniform
      y=stats.uniform.rvs(size=20) # 生成20个[0,1]均匀分布的随机数
    3. stats.beta
      z=stats.beta.rvs(size=20,a=3,b4) # 生成20个服从参数a=3,b=4的贝塔分布随机数
    4. stats.poisson
      r=stats.poisson.rvs(0.6,loc=0,size=20) # 生成20个服从泊松分布的随机数
    二、计算随机数的均值和标准差

    stats.norm.fit:利用正态分布去拟合生成的数据,得到其均值和标准差

    三、计算随机数的偏度

    1、概念:偏度(skewness) ---- 描述的是概率分布的偏斜(非对称)程度。偏度检验有两个返回值,其中第二个返回值是p-value,即观察到的数据集服从正态分布的概率,取值范围为0~1

    2、利用stats.skewtest()计算偏度

    3、
    正偏度分布:右侧尾比左侧尾长,即大数值一端发生的次数较少(均值>中位数) ;
    负偏度分布:左侧尾比右侧尾长,即大数值一端发生的次数较多(均值<中位数);
    正态分布的偏度为0。
    在这里插入图片描述

    四、计算随机数的峰度

    1、概念:峰度(kurtosis) – 描述的是概率分布曲线的陡峭程度
    2、利用stats.kurtosistest()计算峰度

    正态分布的峰度为3,excess_k ( 注: excess_k = kurtosis - 3) 为0,
    低阔峰(platykurtic):相对于正态分布来说更扁平(excess_k < 0)
    高狭峰(leptokurtic):相对于正态分布来说更陡峭 (excess_k > 0)

    五、检查随机数服从正态分布的程度

    1、概念:正态性检验(normality test)---- 检查数据集服从正态分布的程度。该检验同样有两个返回值,其中第二个返回值为p-value。
    2、利用 stats.normaltest() 来检验
    一般情况下pvalue > 0.05即表示服从正态分布。

    六、计算数据所在区段中某一百分比处的数值

    1、利用 scoreatpercentile计算在某一百分比位置上的数值:
    格式:scoreatpercentile (数据集,百分比)

    七、从某数值出发找到对应的百分比

    1、利用 percentileofscore计算某数值对应的百分比:
    格式: percentileofscore(数据集,数值)

    八、直方图显示
    import matplotlib.pyplot as plt
    plt.hist(data) # 设置直方图
    plt.show()     #显示直方图
    
    展开全文
  • SciPy快速入门教程

    万次阅读 2017-11-26 12:58:58
    python在科学计算领域有三个非常受欢迎库,numpy、SciPy、matplotlib。numpy是一个高性能的多维数组的计算库,SciPy是构建在numpy的基础之上的,它提供了许多的操作numpy的数组的函数。SciPy是一款方便、易于使用、...

    python在科学计算领域有三个非常受欢迎库,numpy、SciPy、matplotlib。numpy是一个高性能的多维数组的计算库,SciPy是构建在numpy的基础之上的,它提供了许多的操作numpy的数组的函数。SciPy是一款方便、易于使用、专为科学和工程设计的python工具包,它包括了统计、优化、整合以及线性代数模块、傅里叶变换、信号和图像图例,常微分方差的求解等,SciPy完整的教程https://docs.scipy.org/doc/scipy/reference/index.html。下面就简单的介绍一下SciPy在图像处理方面的应用,如果专业做图像处理当然还是建议使用opencv。本系列教程参考http://cs231n.github.io/python-numpy-tutorial/#scipy

    一、读取图像获取图像的基本信息


    from scipy.misc import imread,imsave,imresize
    
    if __name__ == "__main__":
        #读取图片
        img = imread("timg.jpg")
        #获取图片的数据类型
        img_type = img.dtype
        print(img_type) #uint8
        #获取图片的大小
        img_shape = img.shape
        print(img_shape) #(310, 493, 3)
        #获取图片的高
        img_height = img_shape[0]
        print(img_height) #310
        #获取图片的宽
        img_width = img_shape[1]
        print(img_width)  #493
        #获取图片的通道数
        img_channel = img_shape[2]
        #通道数为1表示黑白图片,通道数为3表示彩色图片
        print(img_channel)  #3

    二、修改图片色彩、裁剪、改变大小

    from scipy.misc import imread,imsave,imresize
    
    if __name__ == "__main__":
        #读取图片
        img = imread("timg.jpg")
        #通过改变图片每一个通道的比例来改变图片的色彩
        #将图片R:G:B的比例设置为1:0.9:0.9
        img_tint = img * [1,0.9,0.9]
        #保存图片,观察图片可以发现保存后的图片会有点偏红
        imsave("timg_color.jpg",img_tint)
        #改变图片的大小,将图片的大小设置为500*500
        img_resize = imresize(img,(500,500))
        #保存图片,因为这不是等比例的缩放,可以观察保存的图片会有点变形
        imsave("timg_resize.jpg",img_resize)
        #裁剪图片
        img_incision = img[50:200,100:400]
        imsave("timg_incision.jpg",img_incision)
        #scipy中还提供了scipy.io.loadmat和scipy.io.savemat来读写MATLAB的文件




    三、计算两点之间的欧式距离

    import numpy as np
    from scipy.spatial.distance import pdist,squareform,cdist
    
    if __name__=="__main__":
        x1 = np.array([[1,1]])
        x2 = np.array([[4,5]])
        #通过cdist函数,计算两个点之间的距离
        distance = cdist(x1,x2,"euclidean")
        print(distance)#[[ 5.]]
        #创建一个数组,数组的每一行都是一个2维的数组,相当于三个点
        x = np.array([[1,1],[4,5],[7,9]])
        #计算每个行的一个点与本身以及另外两个点的欧式距离
        x_d = squareform(pdist(x,"euclidean"))
        #欧式距离计算公式:sqrt((x1-x2)^2+(y1-y2)^2)
        print(x_d)
        '''
        [[  0.   5.  10.]
         [  5.   0.   5.]
         [ 10.   5.   0.]]
        '''


    展开全文
  • 机器学习之Scipy

    千次阅读 2018-10-17 21:31:01
    SciPy是一款方便、易于使用、专为科学和工程设计的Python工具包。它包括统计、优化、涉及线性代数模块、傅里叶变换、信号和图像处理、常微分方程求解器等众多数学包。 1.2 代表性函数使用介绍 1.最优化 (1)数据...

    1.1 总体说明

    SciPy是一款方便、易于使用、专为科学和工程设计的Python工具包。它包括统计、优化、涉及线性代数模块、傅里叶变换、信号和图像处理、常微分方程求解器等众多数学包。

    1.2 代表性函数使用介绍

    1.最优化

    (1)数据建模和拟合

    SciPy函数curve_fit使用基于卡方的方法进行线性回归分析。下面,首先使用f(x)=ax+b生成带有噪声的数据,然后使用curve_fit来拟合。

    例如:线性回归

    import numpy as np
    from scipy.optimize import curve_fit
    #创建函数f(x) = ax + b
    def func(x,a,b):
        return a*x+b
    
    #创建干净数据
    x = np.linspace(0,10,100)
    y = func(x,1,2)
    
    #添加噪声
    yn = y + 0.9* np.random.normal(size=len(x))
    
    #拟合噪声数据
    popt,pcov = curve_fit(func,x,yn)
    
    #输出最优参数
    print(popt)

    例如:高斯分布拟合

    #创建函数
    def func(x,a,b,c):
        return a*np.exp(-(x-b)**2/(2*c**2))
    
    #生成干净数据
    x = np.linspace(0,10,100)
    y = func(x,1,5,2)
    
    #添加噪声
    yn = y+0.2*np.random.normal(size=len(x))
    
    #拟合
    popt,pcov = curve_fit(func,x,yn)
    
    print(popt)
    

    (2)函数求解

    SciPy的optimize模块中有大量的函数求解工具,fsolve是其中最常用的

    例如:线性函数求解

    from scipy.optimize import fsolve
    import numpy as np
    line = lambda x:x+3
    solution = fsolve(line,-2)
    print solution

    例如:求函数交叉点

    from scipy.optimize import fsolve
    import numpy as np
    
    #用于求解的解函数
    def findIntersection(func1,func2,x0):
        return fsolve(lambda x : func1(x)-func2(x),x0)
    
    #两个函数
    funky = lambda x :np.cos(x/5)*np.sin(x/2)
    line = lambda x : 0.01*x - 0.5
    x = np.linspace(0,45,10000)
    result = findIntersection(funky,line,[15,20,30,35,40,45])
    
    #输出结果
    print(result,line(result))

    2.插值

    (1)interp1d

    例如:正弦函数插值

    import numpy as np
    from scipy.interpolate import interp1d
    
    #创建待插值的数据
    x = np.linspace(0,10*np.pi,20)
    y = np.cos(x)
    
    #分别用linear和quadratic插值
    fl = interp1d(x,y,kind='linear')
    fq = interp1d(x,y,kind='quadratic')
    xint = np.linspace(x.min(),x.max(),1000)
    yintl = fl(xint)
    yintq = fq(xint)

    (2)UnivariateSpline

    例如:噪声数据插值

    import numpy as np
    from scipy.interpolate import UnivariateSpline
    
    #创建含噪声的待插值数据
    sample = 30
    x = np.linspace(1,10*np.pi,sample)
    y = np.cos(x) + np.log10(x) + np.random.randn(sample)/10
    
    #插值,参数s为smoothing factor
    f = UnivariateSpline(x,y,s=1)
    xint = np.linspace(x.min(),x.max(),1000)
    yint = f(xint)

    (3)griddata

    例如:利用插值重构图片

    import numpy as np
    from scipy.interpolate import griddata
    
    #定义一个函数
    ripple = lambda x,y : np.sqrt(x**2+y**2) + np.sin(x**2,y**2)
    
    #生成grid数据,复数定义了生成grid数据的step,若无该复数则step为5
    grid_x,grid_y = np.mgrid[0:5:1000j,0:5:1000j]
    
    #生成待插值的数据样本
    xy = np.random.rand(1000,2)
    sample = ripple(xy[:,0]*5,xy[:,1]*5)
    
    #用cubic方法插值
    grid_z0 = griddata(xy*5,sample,(grid_x,grid_y),method='cubic')

    (4)SmoothBivariateSpline

    例如:利用插值重构图片

    import numpy as np
    from scipy.interpolate import SmoothBivariateSpline as SBS
    
    #定义函数
    ripple = lambda x,y : np.sqrt(x**2+y**2)+np.sin(x**2+y**2)
    
    #生成待插值样本
    xy=np.random.rand(1000,2)
    x,y = xy[:,0],xy[:,1]
    sample = ripple(xy[:,0]*5,xy[:,1]*5)
    
    #插值
    fit = SBS(x*5,y*5,sample,s=0.01,kx=4,ky=4)
    interp = fit(np.linspace(0,5,1000),np.linspace(0,5,1000))

    3.积分

    (1)解析积分

    import numpy as np
    from scipy.integrate import quad
    
    #定义被积函数
    func = lambda x:np.cos(np.exp(x))**2
    
    #积分
    solution = quad(func,0,3)
    print solution

    (2)数值积分

    import numpy as np
    from scipy.integrate import quad,trapz
    
    x = np.sort(np.random.randn(150)*4+4).clip(0,5)
    func = lambda x:np.sin(x)*np.cos(x**2)+1
    y = func(x)
    
    fsolution = quad(func,0,5)
    dsolution = trapz(y,x=x)
    print('fsolution='+str(fsolution[0]))
    print('dsolution='+str(dsolution))
    print('The difference is '+str(np.abs(fsolution[0]-dsolution)))

    4.统计

    SciPy中包括mean,std,median,argmax及argmin等在内的基本统计函数,而且numpy.arrays类型中内置了大部分统计函数,以便易于使用。

    import numpy as np
    elements x = np.random.randn(1000)
    mean = x.mean() #均值
    std = x.std() #标准差
    var = x.var() #方差

    SciPy中还包括了各种分布、函数等工具。连续和离散分布SciPy的scipy.stats包中包含了大概80种连续分布和10种离散分布。

    例如:概率密度函数(PDFs)

    import numpy as np
    from scipy.stats import norm
    
    #创建样本区间
    x = np.linspace(-5,5,1000)
    
    #设置正态分布参数,loc为均值,scale为标准差
    dist = norm(loc=0,scale=1)
    
    #得到正态分布的PDF和CDF
    pdf = dist.pdf(x)
    cdf = dist.cdf(x)
    
    #根据分布生成500个随机数
    sample = dist.rvs(500)

    例如:几何分布概率分布函数(PMF)

    import numpy as np
    from scipy.stats import geom
    
    #设置几何分布参数
    p = 0.5
    dist = geom(p)
    
    #设置样本空间
    x = np.linspace(0,5,1000)
    
    #得到几何分布的PMF和CDF
    pmf = dist.pmf(x)
    cdf = dist.cdf(x)
    
    #生成500个随机数
    sample = dist.rvs(500)

    例如:样本分布检验

    import numpy as np
    from scipy import stats
    
    #生成包括100个服从正态分布的随机数样本
    sample = np.random.randn(100)
    
    #用normaltest检验原假设
    out = stats.normaltest(sample)
    print('normaltest output')
    print('Z-score = '+str(out[0]))
    print('P-value = '+str(out[1]))
    
    #ktest是检验拟合度的kolmogorov-Smirnov检验,这里针对正态分布进行检验
    #D是KS统计量的值,越接近0越好
    out = stats.kstest(sample,'norm')
    print('\nkstest output for the Normal distribution')
    print('D = '+str(out[0]))
    print('P-value = '+str(out[1]))
    
    #类似地可以针对其他分布进行检验,如Wald分布
    out = stats.kstest(sample,'wald')
    print('\nkstest output for the Wald distribution')
    print('D = '+str(out[0]))
    print('P-value = '+str(out[1]))

    5.空间和聚类分析

    (1)矢量量化

    矢量量化是信号处理、数据压缩和聚类等领域通用的术语。这里仅关注其在聚类中的应用

    例如:k均值聚类

    import numpy as np
    from scipy.cluster import vq
    
    #生成数据
    c1 = np.random.randn(100,2)+5
    c2 = np.random.randn(30,2)-5
    c3 = np.random.randn(50,2)
    
    #将所有数据放入一个180*2的数组
    data = np.vstack([c1,c2,c3])
    
    #利用k均值方法计算聚类的质心和方差
    centroids,variance = vq.kmeans(data,3)
    
    #变量identified中存放关于聚类的信息
    identified,distance = vq.vq(data,centroids)
    
    #获得各类别的数据
    vqc1 = data[identified == 0]
    vqc2 = data[identified == 1]
    vqc3 = data[identified == 2]

    (2)层次聚类

    层次聚类是一种重要的聚类方法,但其输出结果比较复杂,不能像k均值那样给出清晰的聚类结果。

    例如:输入一个距离矩阵,输出一个树状图

    #coding:utf-8
    import numpy as np
    import matplotlib.pyplot as mpl
    from scipy.spatial.distance import pdist,squareform
    import scipy.cluster.hierarchy as hy
    
    #用于生成聚类数据的函数
    def clusters(number=20,cnumber=5,csize=10):
        #聚类服从高斯分布
        rnum = np.random.rand(cnumber,2)
        rn = rnum[:,0]*number
        rn = rn.astype(int)
        rn[np.where(rn<5)] = 5
        rn[np.where(rn>number/2.)] = round(number/2.0)
        ra = rnum[:,1]*2.9
        ra[np.where(ra<1.5)] = 1.5
        cls = np.random.randn(number,3)*csize
        rxyz = np.random.randn(cnumber-1,3)
        for i in xrange(cnumber-1):
            tmp = np.random.randn(rn[i+1],3)
            x = tmp[:,0]+(rxyz[i,0]*csize)
            y = tmp[:,1]+(rxyz[i,1]*csize)
            z = tmp[:,2]+(rxyz[i,2]*csize)
            tmp = np.column_stack([x,y,z])
            cls = np.vstack([cls,tmp])
        return cls
    
    #创建待聚类数据及距离矩阵
    cls = clusters()
    D = pdist(cls[:,0:2])
    D = squareform(D)
    
    #绘制左侧树状图
    fig = mpl.figure(figsize=(8,8))
    ax1 = fig.add_axes([0.09,0.1,0.2,0.6])
    Y1 = hy.linkage(D,method='complete')
    cutoff = 0.3 * np.max(Y1[:,2])
    Z1 = hy.dendrogram(Y1,orientation='left',color_threshold=cutoff)
    ax1.xaxis.set_visible(False)
    ax1.yaxis.set_visible(False)
    
    #绘制顶部树状图
    ax2 = fig.add_axes([0.3,0.71,0.6,0.2])
    Y2 = hy.linkage(D,method='average')
    cutoff = 0.3 * np.max(Y2[:,2])
    Z2 = hy.dendrogram(Y2,color_threshold=cutoff)
    ax2.xaxis.set_visible(False)
    ax2.yaxis.set_visible(False)
    
    #显示距离矩阵
    ax3 = fig.add_axes([0.3,0.1,0.6,0.6])
    idx1 = Z1['leaves']
    idx2 = Z2['leaves']
    D = D[idx1,:]
    D = D[:,idx2]
    ax3.matshow(D,aspect='auto',origin='lower',cmap=mpl.cm.YlGnBu)
    ax3.xaxis.set_visible(False)
    ax3.yaxis.set_visible(False)
    
    #保存图片,显示图片
    fig.savefig('cluster_hy_f01.pdf',bbox='tight')
    mpl.show()
    

    在上图虽然计算了数据点之间的距离,但是还是难以将各类·区分开。函数fcluster可以根据阈值来区分各类,其输出结果依赖于linkage函数所采用的方法,如complete或者single等,它的第二个参数既是阈值。dendrogram函数中默认的阈值是0.7*np.max(Y[:,2]),这里还使用0.3。

    例如:

    #coding:utf-8
    import numpy as np
    import matplotlib.pyplot as mpl
    from scipy.spatial.distance import pdist,squareform
    import scipy.cluster.hierarchy as hy
    
    #得到不同类别数据点的坐标
    def group(data,index):
        number = np.unique(index)
        groups = []
        for i in number:
            groups.append(data[index == i])
        return groups
    
    #用于生成聚类数据的函数
    def clusters(number=20,cnumber=5,csize=10):
        #聚类服从高斯分布
        rnum = np.random.rand(cnumber,2)
        rn = rnum[:,0]*number
        rn = rn.astype(int)
        rn[np.where(rn<5)] = 5
        rn[np.where(rn>number/2.)] = round(number/2.0)
        ra = rnum[:,1]*2.9
        ra[np.where(ra<1.5)] = 1.5
        cls = np.random.randn(number,3)*csize
        rxyz = np.random.randn(cnumber-1,3)
        for i in xrange(cnumber-1):
            tmp = np.random.randn(rn[i+1],3)
            x = tmp[:,0]+(rxyz[i,0]*csize)
            y = tmp[:,1]+(rxyz[i,1]*csize)
            z = tmp[:,2]+(rxyz[i,2]*csize)
            tmp = np.column_stack([x,y,z])
            cls = np.vstack([cls,tmp])
        return cls
    
    #创建数据
    cls = clusters()
    
    #计算linkage矩阵
    Y = hy.linkage(cls[:,0:2],method='complete')
    
    #从层次数据结构中,用fcluster函数将层次结构的数据转为flat cluster
    cutoff = 0.3 * np.max(Y[:,2])
    index = hy.fcluster(Y,cutoff,'distance')
    
    #使用groups函数将数据划分类别
    groups = group(cls,index)
    
    #绘制数据点
    fig = mpl.figure(figsize=(6,6))
    ax = fig.add_subplot(111)
    colors = ['r','c','b','g','orange','k','y','gray']
    for i,g in enumerate(groups):
        i = np.mod(i,len(colors))
        ax.scatter(g[:,0],g[:,1],c=colors[i],edgecolor='none',s=50)
        ax.xaxis.set_visible(False)
        ax.yaxis.set_visible(False)
    
    fig.savefig('cluster_hy_f02.pdf',bbox='tight')
    mpl.show()

    6.稀疏矩阵

    NumPy处理10^6级别的数据没有什么大问题·,当数据量达到10^7级别时速度开始变慢,内存受到限制。当处理超大规模数据集,比如10^10级别,且数据中包含大量的0时,可采用稀疏矩阵提高速度和效率

    提示:使用data.nbytes可查看数据可占空间大小

    例如:矩阵与稀疏矩阵运算对比

    # coding:utf-8
    import numpy as np
    from scipy.sparse.linalg import eigsh
    from scipy.linalg import eigh
    import scipy.sparse
    import time
    
    N = 3000
    
    #创建随机稀疏矩阵
    m = scipy.sparse.rand(N,N)
    
    #创建包含相同数据的数组
    a = m.toarray()
    print('The numpy array data size: '+str(a.nbytes)+' bytes')
    print('The sparse matrix data size: '+str(m.data.nbytes)+' bytes')
    
    #数组求特征值
    t0 = time.time()
    res2 = eigh(a)
    dt = str(np.round(time.time()-t0,3))+' seconds'
    print('Non-sparse operation takes '+dt)
    
    #稀疏矩阵求特征值
    t0 = time.time()
    res2 = eigsh(m)
    dt = str(np.round(time.time()-t0,3)) + ' seconds'
    print('Sparse operation takes '+dt)
    

     

    展开全文
  • Scipy---入门篇

    千次阅读 2018-08-01 20:58:27
    一、scipy中io模块使用 二、scipy中的stats子模块,用于产生符合特定规律的随机数 二、计算随机数的均值和标准差 三、scipy计算随机数组的偏度、峰度 三、计算数据符合正太分布程度的函数 五、练习 一、...


    一、scipy中io模块使用

    import scipy
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy import io
    #用io模块写入数据
    a = np.arange(7)
    io.savemat('a.mat',{'array':a})
    data = io.loadmat('a.mat')
    print(data['array'])
    [[0 1 2 3 4 5 6]]
    

    二、scipy中stats子模块产生符合特定规律的随机数

    from scipy import stats

    Stats提供了产生连续性分布的函数:

    • 均匀分布(uniform)
    • 正态分布(norm)
    • 贝塔分布(beta)
    • 离散分布
    • 伯努利分布(bernoulli)
    • 几何分布(geom)
    • 泊松分布(poisson)
    #产生符合正态分布的随机数
    x = stats.norm.rvs(size = 20)
    x
    array([-0.3668553 , -1.97745322,  0.3353114 , -0.89573224, -0.11372808,
            0.51618827, -1.28898304,  0.25557684, -2.59951208, -0.82487573,
            0.66980873, -0.49528425, -1.34229043,  0.79874304, -0.81134343,
            0.85968282, -1.35237681, -0.59951369,  0.65832086,  0.82553856])
    
    #用频率分布直方图反映一组数据的分布情况
    plt.hist(x)#数据点比较少时,不一定符合正太分布
    plt.show()

    这里写图片描述

    x = stats.norm.rvs(size = 20000)#取多数据点进行尝试
    plt.hist(x)
    plt.show()#多数据情况下可看出符合正态分布

    这里写图片描述

    #产生服从beta分布的数组
    y = stats.beta.rvs(size=100,a=0.5,b=0.5)
    plt.hist(y)
    plt.show()

    这里写图片描述

    三、计算随机数的均值和标准差

    #fit方法拟合一组数据
    generated = stats.norm.rvs(size=920)
    mean,std = stats.norm.fit(generated)
    mean#均值
    0.075387649613412891
    
    std#标准差
    1.0126002204446221
    

    四、scipy计算随机数组的偏度、峰度

    normal = stats.normal = stats.norm.rvs(size=200000000)
    '''
    检验随机数组的偏度函数  stats.skewtest()  返回数组的偏度和符合正太分布的程度
    skew 偏度
    pvalue  符合正太分布的程度  0-1之间的小数
    '''
    
    skew,pvalue=stats.skewtest(normal)
    
    skew#偏度
    -0.00062751704801152495
    
    pvalue#符合正太分布的程度
    0.99949931386861079
    
    normal= stats.norm.rvs(size=900)
    # scipy检测数组峰度函数  stats.kurtosistest()   返回峰度和符合正太分布的程度
    kurtosis,pvalue=stats.kurtosistest(normal)
    print("峰度:",kurtosis)
    print("符合正太分布程度:",pvalue)
    峰度: 0.839481223202
    符合正太分布程度: 0.401199321623
    

    五、计算数据符合正太分布程度的函数

    
    '''
    1、 skew,pvalue = stats.skewtest()  
        skew:偏度   pvalue:符合正太分布程度
    2、 kurtosis,pvalue = stats.kurtosistest()
        kurtosis:峰度
        pvalue:符合正太分布程度
    3、 stats.normaltest()  返回符合正太分布程度
    
    '''
    
    normal = stats.norm.rvs(size=100)
    
    # stats.normaltest()方法测试数据符合正太分布的程度
    normaltest,pvalue = stats.normaltest(normal)
    print("符合正太分布的程度:",pvalue)
    符合正太分布的程度: 0.885540772912
    
    #将数据进行排序后,计算在某一百 分比位置上的数值
    stats.scoreatpercentile(normal,95)
    1.8470874538995359
    
    #利用percentileofscore计算某数值对应的百分数
    stats.percentileofscore(normal,1.12693064)
    84.0
    

    六、练习

    需求:比较两组分数(总人数为:4653),分别为考试分数及人数。分析两组分数的考试难易度。

    #一组数据
    ararrEasyr1=np.array([[0,2],[2.5,4],[5,6],[7.5,9],[10,13],[12.5,16],[15,19],[17.5,23],[20,27],
                        [22.5,31],[25,35],[27.5,40],[30,53],[32.5,68],[35,90],[37.5,110],[40,130],
                        [42.5,148],[45,165],[47.5,182],[50,195],[52.5,208],[55,217],[57.5,226],[60,334],
                       [62.5,342],[65,349],[67.5,500],[70,511],[72.5,300],[75,200],[77.5,80],[80,20]])
    #二组数据
    arrDiff=np.array([[0,20],[2.5,30],[5,45],[7.5,70],[10,100],[12.5,135],[15,170],[17.5,205],[20,226],
                        [22.5,241],[25,251],[27.5,255],[30,256],[32.5,253],[35,249],[37.5,242],[40,234],
                        [42.5,226],[45,217],[47.5,208],[50,195],[52.5,182],[55,165],[57.5,148],[60,130],
                       [62.5,110],[65,40],[67.5,30],[70,20],[72.5,5],[75,5],[77.5,0],[80,0]])
    #取出分数及人数
    scores1 = ararrEasyr1[:,0]
    person1 = ararrEasyr1[:,1]
    
    scores2 = arrDiff[:,0]
    person2 = arrDiff[:,1]
    
    scores1
    array([  0. ,   2.5,   5. ,   7.5,  10. ,  12.5,  15. ,  17.5,  20. ,
            22.5,  25. ,  27.5,  30. ,  32.5,  35. ,  37.5,  40. ,  42.5,
            45. ,  47.5,  50. ,  52.5,  55. ,  57.5,  60. ,  62.5,  65. ,
            67.5,  70. ,  72.5,  75. ,  77.5,  80. ])
    
    person1
    array([   2.,    4.,    6.,    9.,   13.,   16.,   19.,   23.,   27.,
             31.,   35.,   40.,   53.,   68.,   90.,  110.,  130.,  148.,
            165.,  182.,  195.,  208.,  217.,  226.,  334.,  342.,  349.,
            500.,  511.,  300.,  200.,   80.,   20.])
    
    #前面得到的数据为浮点数,这里转成整型进行处理
    newperson1 = person1.astype(np.int64)
    newperson2 = person2.astype(np.int64)
    print(newperson1)
    print(newperson2)
    #np,repeat()方法得出每个分数出现的次数
    arr1 = np.repeat(scores1,newperson1)
    arr2 = np.repeat(scores2,newperson2)
    print(arr1)
    print(arr2)
    [  2   4   6   9  13  16  19  23  27  31  35  40  53  68  90 110 130 148
     165 182 195 208 217 226 334 342 349 500 511 300 200  80  20]
    [ 20  30  45  70 100 135 170 205 226 241 251 255 256 253 249 242 234 226
     217 208 195 182 165 148 130 110  40  30  20   5   5   0   0]
    [  0.    0.    2.5 ...,  80.   80.   80. ]
    [  0.   0.   0. ...,  75.  75.  75.]
    
    #求平均值scipy/np.meaan
    aver1 = scipy.mean(arr1)
    aver2 = scipy.mean(arr2)
    print("第一组的平均值为:",aver1)
    print("第二组的平均值为:",aver2)
    第一组的平均值为: 57.3269933376
    第二组的平均值为: 35.0654085353
    
    #求中位数scipy/np.median
    median1 = scipy.median(arr1)
    median2 = scipy.median(arr2)
    print("第一组的中位数为:",median1)
    print("第二组的中位数为:",median2)
    第一组的中位数为: 60.0
    第二组的中位数为: 35.0
    
    #求众数stats.mode及奇异值(平均值/标准差)
    mode1 = stats.mode(arr1)
    mode2 = stats.mode(arr2)
    print("第一组的众数为:",mode1)
    print("第二组的众数为:",mode2)
    
    hen1 = aver1/std1
    hen2 = aver2/std2
    print("第一组变异系数为:",hen1)
    print("第二组变异系数为:",hen2)
    第一组的众数为: ModeResult(mode=array([ 70.]), count=array([511]))
    第二组的众数为: ModeResult(mode=array([ 30.]), count=array([256]))
    第一组变异系数为: 3.95595207737
    第二组变异系数为: 2.24892999025
    
    #极差ptp,方差var,标准差std
    ptp1 = scipy.ptp(arr1)
    ptp2 = scipy.ptp(arr2)
    print("第一组极差为:",ptp1)
    print("第二组极差为:",ptp2)
    
    
    var1 = np.var(arr1)
    var2 = np.var(arr2)
    print("第一组方差为:",var1)
    print("第二组方差为:",var2)
    
    std1 = np.std(arr1)
    std2 = np.std(arr2)
    print("第一组标准差为:",std1)
    print("第二组标准差为:",std2)
    第一组极差为: 80.0
    第二组极差为: 75.0
    第一组方差为: 209.998544947
    第二组方差为: 243.111741453
    第一组标准差为: 14.491326542
    第二组标准差为: 15.592040965
    
    skew1 = stats.skew(arr1)
    skew2 = stats.skew(arr1)
    print("第一组偏度为:",skew1)
    print("第二组偏度为:",skew2)
    第一组偏度为: -1.029998112478232
    第二组偏度为: -1.029998112478232
    
    kurtosis1 = stats.kurtosis(arr1)
    kurtosis2 = stats.kurtosis(arr1)
    print("第一组偏度为:",kurtosis1)
    print("第二组偏度为:",kurtosis2)
    第一组偏度为: 0.7454850579509733
    第二组偏度为: 0.7454850579509733
    
    #用来正常显示中文标签 
    plt.rcParams['font.sans-serif']=['SimHei'] 
    #用来正常显示负号 
    plt.rcParams['axes.unicode_minus']=False
    
    fig = plt.figure()
    ax1 = fig.add_subplot(121)
    ax1.boxplot(arr1)
    ax1.set_title('第一组箱型图')
    ax2 = fig.add_subplot(122)
    ax2.boxplot(arr2)
    ax2.set_title('第二组箱型图')
    plt.show()

    这里写图片描述

    fig = plt.figure()
    ax1 = fig.add_subplot(121)
    ax1.hist(arr1,width=0.8)
    ax1.set_title('第一组分布直方图')
    ax2 = fig.add_subplot(122)
    ax2.hist(arr2,width=0.8)
    ax2.set_title('第二组分布直方图')
    plt.show()

    这里写图片描述

    展开全文
  • Scipy教程

    万次阅读 2019-05-30 16:15:54
    python在科学计算领域有三个非常受欢迎库,numpy、SciPy、matplotlib。numpy是一个高性能的多维数组的计算库,SciPy是构建在numpy的基础之上的,它提供了许多的操作numpy的数组的函数。SciPy是一款方便、易于使用、...
  • Scipy的简单使用

    千次阅读 2019-04-21 19:38:21
    SciPy是一款方便、易于使用、专为科学和工程设计的python工具包,它包括了统计、优化、整合以及线性代数模块、傅里叶变换、信号和图像图例,常微分方差的求解等 官方:https://www.scipy.org/ 使用前安装该模块:...
  • Py之Scipy:Python库之Scipy库的简介、安装、使用方法详细攻略 目录 Scipy库的简介 Scipy库的安装 Scipy库的使用方法 Scipy库的简介 Scipy高级科学计算库:和Numpy联系很密切,Scipy一般都是操控...
  • Scipy简介

    千次阅读 2019-08-04 22:09:22
    Scipy简介 Scipy依赖于Numpy Scipy包含的功能:最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等 应用场景:Scipy是高端科学计算工具包,用于数学、科学、...
  • python之SciPy简介

    千次阅读 2019-09-23 20:39:46
    1.SciPy是什么 SciPy是python的一个著名的开源科学库,SciPy一般都是操纵NumPy数组来进行科学计算,统计分析,可以说是基于NumPy之上。SciPy提供了许多科学计算的库函数,如线性代数,微分方程,信号处理,图像...
  • python的scipy简介

    万次阅读 2018-11-03 10:43:58
    python的scipy简介scipy和numpy的关系scipy的子模块简介 scipy和numpy的关系 scipy是专门用于科学计算的一个常用的库,他于Numpy有着密切的关系,是需要通过Numpy做为scipy的基础,同时也是通过Numpy数据来操控科学...
  • doc汇总:https://docs.scipy.org/doc/scipy模块:https://docs.scipy.org/doc/scipy/reference/py-modindex.html调试器:http://scipy.github.io/devdocs/hacking.html方法1)sklearn.datasets.make_blobs2)(end)....
  • no module named scipy 的解决办法|报错

    万次阅读 2019-09-03 16:41:07
    打开cmd输入 pip install scipy
  • scipy.special —— 排列、组合与阶乘

    千次阅读 2017-02-21 21:36:01
    不要重复制造轮子,这里直接调用 scipy 的 api 函数
  • Python 常安装scipy失败及解决方法

    万次阅读 2019-01-29 22:02:25
    今天用pip安装scipy时老是安装不成功,搜了下资料从网上下载了scipy的源码,应用到程序时发现还是有问题。找了很久才解决。 之前numpy是用pip安装的,但是scipy要依赖于numpy和其他的很多库(如mkl/LAPACK/BLAS,...
  • module ‘scipy.misc’ has no attribute ‘imresize’解决办法: pip3 install Pillow
  • 打开cmd 窗口,输入pip install scipy,安装完成即可输入。
  • 查看python的版本很简单: python -V or python --version 查看python安装的宏包版本,以scipy为例,其他包一样 先进入python里,即在终端中输入python(或python2,python3) ...scipy.__version__...
  • Python——解决scipy导入出错问题

    千次阅读 2016-09-28 21:48:40
    SciPy是一款方便、易于使用、专为科学和工程设计的Python工具包.它包括统计,优化,整合,线性代数模块,傅里叶变换,信号和图像处理,常微分方程求解器等。使用这些功能需要SciPy,但是Python 2.7.12在安装时没有改软件,...
  • ImportError: No module named scipy.misc

    千次阅读 2018-05-26 15:38:59
    pip install -U scipy
  • linux中Scipy下载与安装

    千次阅读 2018-06-20 19:28:44
    scipy下载地址:https://github.com/scipy/scipy/releasesscipy安装命令:sudo pip3 install scipy (搞定)https://blog.csdn.net/xiangcheng001/article/details/53994870只需要几个命令即可完成:sudo apt-get ...
1 2 3 4 5 ... 20
收藏数 53,980
精华内容 21,592
关键字:

scipy