[ Scipy中文文档 ] 一篇文章快速入门Scipy教程

Song • 17430 次浏览 • 0 个回复 • 2017年08月30日

1、 Scipy特征

  • (1)内置了图像处理, 优化,统计等等相关问题的子模块
  • (2)scipy 是Python科学计算环境的核心。 它被设计为利用 numpy 数组进行高效的运行。从这个角度来讲,scipy和numpy是密不可分的。

2、文件操作io

  • (1)导包:from scipy import io as spio
  • (2)保存mat格式文件

    spio.savemat("test.mat", {'a':a})
  • (3)加载mat文件

    data = spio.loadmat("test.mat")

    访问值:data[‘a’]–>相当于map

  • (4)读取图片文件 导包:from scipy import misc 读取:data = misc.imread("123.png") [注1]:与matplotlib中plt.imread('fname.png')类似 [注2]:执行misc.imread时可能提醒不存在这个模块,那就安装pillow的包

3、线性代数操作linalg

  • (1)求行列式det res = linalg.det(a)

  • (2)求逆矩阵inv res = linalg.inv(a) 若是矩阵不可逆,则会抛异常LinAlgError: singular matrix

  • (3)奇异值分解svd u,s,v = linalg.svd(a) [注1]:s为a的特征值(一维),降序排列, [注2]:a = usv’(需要将s转换一下才能相乘)
    t = np.diag(s)
    print u.dot(t).dot(v)

4、梯度下降优化算法

  • (1)fmin_bfgs

    def f(x):
    return x**2-2*x
    initial_x = 0
    optimize.fmin_bfgs(f,initial_x)

    [注]:initial_x为初始点(此方法可能会得到局部最小值)

  • (2)fmin()fmin_cg等等方法

5、拟合(最小二乘法)

  • (1)curve_fit

    #产生数据
    def f(x):
    return x**2 + 10*np.sin(x)
    xdata = np.linspace(-10, 10, num=20)
    ydata = f(xdata)+np.random.randn(xdata.size)
    plt.scatter(xdata, ydata, linewidths=3.0, 
           edgecolors="red")
    #plt.show()
    #拟合
    def f2(x,a,b):
    return a*x**2 + b*np.sin(x)
    guess = [2,2]
    params, params_covariance = optimize.curve_fit(f2, xdata, ydata, guess)
    #画出拟合的曲线
    x1 = np.linspace(-10,10,256)
    y1 = f2(x1,params[0],params[1])
    plt.plot(x1,y1)
    plt.show()

    6、统计检验

  • (1)T-检验stats.ttest_ind
    a = np.random.normal(0, 1, size=10)
    b = np.random.normal(1, 1, size=10)
    print stats.ttest_ind(a, b)

    输出:(-2.6694785119868358, 0.015631342180817954) 后面的是概率p: 两个过程相同的概率。如果其值接近1,那么两个过程几乎可以确定是相同的,如果其值接近0,那么它们很可能拥有不同的均值。

7、插值

  • (1)导入包:from scipy.interpolate import interp1d

    #产生一些数据
    x = np.linspace(0, 1, 10)
    y = np.sin(2 * np.pi * x)
    computed_time = np.linspace(0, 1, 50)
    #线性插值
    linear_interp = interp1d(x, y)
    linear_results = linear_interp(computed_time)
    #三次方插值
    cubic_interp = interp1d(x, y, kind='cubic')
    cubic_results = cubic_interp(computed_time)
    #作图
    plt.plot(x, y, 'o', ms=6, label='y')
    plt.plot(computed_time, linear_results, label='linear interp')
    plt.plot(computed_time, cubic_results, label='cubic interp')
    plt.legend()
    plt.show()

    8、求解非线性方程组

  • (1)optimize中的fsolve
    from scipy.optimize import fsolve
    def func(x):
    x0,x1,x2 = x.tolist()
    return [5*x1-25,5*x0*x0-x1*x2,x2*x0-27]
    initial_x = [1,1,1]
    result = fsolve(func, initial_x)
    print result

原文出处:Python科学计算


原创文章,转载请注明 :[ Scipy中文文档 ] 一篇文章快速入门Scipy教程 - pytorch中文网
原文出处: https://ptorch.com/news/49.html
问题交流群 :168117787
提交评论
要回复文章请先登录注册
用户评论
  • 没有评论
Pytorch是什么?关于Pytorch! [ Pandas中文文档 ] 一篇文章快速入门Pandas教程