读书报告

一、基本函数用法
(一)numpy
numpy 是 Python 中用于科学计算的核心库,提供了高性能的数组对象和数学函数。

  1. 数组创建:
    np.array():可将列表、元组等转换为numpy数组,如 np.array([1, 2, 3]) 创建一维数组,np.array([[1, 2], [3, 4]]) 创建二维数组。
    np.zeros()、np.ones():分别创建全0和全1数组,np.zeros((3, 3)) 创建 3x3 的全0数组,方便初始化数据。
  2. 数组运算:
    元素级运算:支持加、减、乘、除等,如a=np.array([1, 2]),b=np.array([3, 4]),a+b得到[4, 6]。
    矩阵乘法:np.dot()用于矩阵乘法,对于二维数组a形状为 (m, n)和b形状为(n, p),np.dot(a, b)得到形状为(m, p)的结果,常用于线性代数计算。
    (二)scipy
    scipy基于numpy,提供更高级的科学计算功能,涵盖优化、信号处理、统计等领域。
  3. 优化函数:
    scipy.optimize.minimize():用于寻找函数最小值,可传入目标函数、初始猜测值等,如优化f(x) = x**2,能快速找到最小值点。
    曲线拟合 scipy.optimize.curve_fit():给定数据和模型函数,拟合得到最佳参数,在数据分析中用于拟合实验数据。
  4. 信号处理:
    scipy.signal.filter_design中的滤波器设计函数,可设计低通、高通滤波器,对信号进行去噪等处理,如butter()函数设计Butterworth滤波器。
    (三)pandas
    pandas是数据处理的强大工具,擅长处理表格型数据。
  5. 数据结构:
    DataFrame:二维表格结构,可存储不同类型数据,如pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [20, 21]}),方便数据的组织和查看。
    Series:一维数组,带标签,可作为 DataFrame 的一列,pd.Series([1, 2, 3], index=['a', 'b', 'c']),标签有助于数据索引。
  6. 数据操作:
    数据读取:pd.read_csv()可读取 CSV 文件数据到 DataFrame,快速导入外部数据;pd.read_excel()读取Excel文件。
    数据筛选:通过布尔索引,如df[df['Age'] > 20]筛选出年龄大于20的行,便于数据清洗和分析。
    (四)matplotlib
    matplotlib是绘图库,用于数据可视化。
  7. 基本绘图:
    plt.plot():绘制折线图,传入x、y数据,如plt.plot([1, 2, 3], [4, 5, 6])绘制简单折线,可设置线条颜色、样式等参数。
    plt.scatter():绘制散点图,展示数据点分布,plt.scatter(x, y)用于分析变量间关系。
  8. 图表美化:
    添加标题、标签:plt.title()添加图表标题,plt.xlabel()、plt.ylabel()添加坐标轴标签,增强图表可读性。
    图例设置:plt.legend()显示图例,区分不同数据系列,使图表更清晰。

二、解决具体问题示例
(一)题目背景
以书中“用 Python求解一组数据的线性回归拟合”为例,假设数据为x=[1, 2, 3, 4, 5],y=[2, 4, 6, 8, 10],需用numpy、scipy进行拟合。
(二)代码实现
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

def linear_func(x, a, b):
return a * x + b

x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])

popt, pcov = curve_fit(linear_func, x, y)
a, b = popt

x_new = np.linspace(1, 5, 100)
y_new = linear_func(x_new, a, b)

plt.scatter(x, y, label='Original data')
plt.plot(x_new, y_new, 'r-', label='Fitted curve')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Linear Regression Fit')
plt.legend()
plt.show()
(三)代码说明

  1. 模型定义:linear_func定义线性模型y=a*x + b,作为拟合的目标函数。
  2. 拟合过程:curve_fit 传入模型函数、x和y数据,得到拟合参数a和b。
  3. 可视化:用matplotlib绘制原始数据散点和拟合曲线,清晰展示拟合效果,体现了numpy、scipy、matplotlib的协同使用。

三、图像处理示例
(一)题目背景
对一张灰度图像进行简单的滤波处理,使用scipy的信号处理模块和matplotlib展示处理前后图像。
(二)代码实现
import numpy as np
from scipy import ndimage
from matplotlib import pyplot as plt
from PIL import Image

image = Image.open('example.jpg').convert('L')
image_array = np.array(image)

filtered_image = ndimage.median_filter(image_array, size=3)

plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.imshow(image_array, cmap='gray')
plt.title('Original Image')
plt.subplot(1, 2, 2)
plt.imshow(filtered_image, cmap='gray')
plt.title('Filtered Image')
plt.show()
(三)代码说明

  1. 图像读取:用PIL库读取图像并转为灰度模式,存储为numpy数组image_array。
  2. 滤波处理:ndimage.median_filter对图像数组进行中值滤波,size=3设置滤波器大小,去除图像噪声。
  3. 结果展示:通过matplotlib绘制原始和处理后图像,对比呈现图像处理效果,体现scipy在图像处理中的应用及与matplotlib的结合。
posted @ 2025-06-20 20:51  qywywq  阅读(22)  评论(0)    收藏  举报