授课语音

SciPy 基本函数

SciPy 是一个广泛用于科学计算的库,包含许多用于数值计算、优化、积分、插值、信号处理等方面的函数。下面是一些 SciPy 中常用的基本函数,涵盖优化、积分、线性代数、插值、统计等领域。

1. 优化函数 (scipy.optimize)

SciPy 提供了很多优化函数来求解最小化、最大化问题。最常用的函数是 minimize()fmin(),它们用于最小化一个目标函数。

  • scipy.optimize.minimize():用于最小化目标函数。

    from scipy.optimize import minimize
    
    # 定义目标函数
    def objective(x):
        return x**2 + 3*x + 2
    
    # 调用 minimize() 最小化目标函数
    result = minimize(objective, 0)  # 初始猜测值为0
    print(f"最小值为: {result.fun}, 在 x = {result.x} 处")
    
  • scipy.optimize.fmin():一种用于多变量函数的简单最小化方法。

    from scipy.optimize import fmin
    
    # 定义目标函数
    def objective(x):
        return x[0]**2 + x[1]**2
    
    # 使用 fmin 进行多变量最小化
    result = fmin(objective, [0, 0])
    print(f"最小值点: {result}")
    

2. 积分函数 (scipy.integrate)

SciPy 提供了多种积分方法,其中最常用的包括 quad()odeint(),用于计算定积分和求解常微分方程。

  • scipy.integrate.quad():用于计算定积分。

    from scipy.integrate import quad
    
    # 定义被积函数
    def integrand(x):
        return x**2
    
    # 计算积分,区间 [0, 1]
    result, error = quad(integrand, 0, 1)
    print(f"积分结果: {result}, 误差估计: {error}")
    
  • scipy.integrate.odeint():用于求解常微分方程。

    from scipy.integrate import odeint
    import numpy as np
    
    # 定义微分方程
    def model(y, t):
        dydt = -2 * y
        return dydt
    
    # 初始条件和时间点
    y0 = 1
    t = np.linspace(0, 5, 100)
    
    # 求解微分方程
    y = odeint(model, y0, t)
    print(f"解的最后结果: {y[-1]}")
    

3. 线性代数函数 (scipy.linalg)

SciPy 提供了很多高效的线性代数计算函数,如求解线性方程组、矩阵的特征值等。

  • scipy.linalg.solve():用于求解线性方程组 Ax = b

    from scipy.linalg import solve
    import numpy as np
    
    A = np.array([[3, 1], [1, 2]])
    b = np.array([9, 8])
    
    # 求解方程组
    x = solve(A, b)
    print(f"方程组的解为: {x}")
    
  • scipy.linalg.eig():用于计算矩阵的特征值和特征向量。

    from scipy.linalg import eig
    import numpy as np
    
    A = np.array([[4, -2], [1,  1]])
    
    # 计算矩阵的特征值和特征向量
    values, vectors = eig(A)
    print(f"特征值: {values}")
    print(f"特征向量: {vectors}")
    

4. 插值函数 (scipy.interpolate)

SciPy 提供了丰富的插值方法,包括线性插值、样条插值等。

  • scipy.interpolate.interp1d():用于一维插值。

    from scipy.interpolate import interp1d
    import numpy as np
    
    # 原始数据
    x = np.array([1, 2, 3, 4])
    y = np.array([1, 4, 9, 16])
    
    # 创建插值函数
    f = interp1d(x, y, kind='linear')
    
    # 使用插值函数
    result = f(2.5)
    print(f"插值结果: {result}")
    
  • scipy.interpolate.interp2d():用于二维插值。

    from scipy.interpolate import interp2d
    import numpy as np
    
    # 创建二维数据
    x = np.array([1, 2, 3])
    y = np.array([4, 5, 6])
    z = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    
    # 创建二维插值函数
    f = interp2d(x, y, z, kind='linear')
    
    # 进行插值
    result = f(2.5, 5.5)
    print(f"二维插值结果: {result}")
    

5. 统计函数 (scipy.stats)

SciPy 提供了大量统计分析工具,包括概率分布、假设检验等。

  • scipy.stats.ttest_ind():独立样本t检验,用于比较两组数据是否有显著差异。

    from scipy import stats
    import numpy as np
    
    # 两组样本数据
    sample1 = np.array([1, 2, 3, 4, 5])
    sample2 = np.array([6, 7, 8, 9, 10])
    
    # 进行t检验
    t_stat, p_value = stats.ttest_ind(sample1, sample2)
    print(f"t-statistic: {t_stat}, p-value: {p_value}")
    
  • scipy.stats.norm():正态分布相关函数。

    from scipy.stats import norm
    
    # 生成一个标准正态分布的随机样本
    samples = norm.rvs(size=1000)
    
    # 计算正态分布的均值和标准差
    mean = np.mean(samples)
    std = np.std(samples)
    
    print(f"均值: {mean}, 标准差: {std}")
    

总结

  • SciPy 提供了丰富的函数库,涵盖优化、积分、插值、线性代数、统计等领域,支持高效的科学计算。
  • 通过这些函数,我们可以快速实现常见的科学计算任务,如最优化问题求解、定积分、微分方程求解、矩阵运算等。
  • 熟练掌握这些函数,将帮助我们在数据分析、机器学习、工程计算等领域提升效率。
去1:1私密咨询

系列课程: