读书报告
一、基本函数用法
(一)numpy
numpy 是 Python 中用于科学计算的核心库,提供了高性能的数组对象和数学函数。
- 数组创建:
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数组,方便初始化数据。 - 数组运算:
元素级运算:支持加、减、乘、除等,如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,提供更高级的科学计算功能,涵盖优化、信号处理、统计等领域。 - 优化函数:
scipy.optimize.minimize():用于寻找函数最小值,可传入目标函数、初始猜测值等,如优化f(x) = x**2,能快速找到最小值点。
曲线拟合 scipy.optimize.curve_fit():给定数据和模型函数,拟合得到最佳参数,在数据分析中用于拟合实验数据。 - 信号处理:
scipy.signal.filter_design中的滤波器设计函数,可设计低通、高通滤波器,对信号进行去噪等处理,如butter()函数设计Butterworth滤波器。
(三)pandas
pandas是数据处理的强大工具,擅长处理表格型数据。 - 数据结构:
DataFrame:二维表格结构,可存储不同类型数据,如pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [20, 21]}),方便数据的组织和查看。
Series:一维数组,带标签,可作为 DataFrame 的一列,pd.Series([1, 2, 3], index=['a', 'b', 'c']),标签有助于数据索引。 - 数据操作:
数据读取:pd.read_csv()可读取 CSV 文件数据到 DataFrame,快速导入外部数据;pd.read_excel()读取Excel文件。
数据筛选:通过布尔索引,如df[df['Age'] > 20]筛选出年龄大于20的行,便于数据清洗和分析。
(四)matplotlib
matplotlib是绘图库,用于数据可视化。 - 基本绘图:
plt.plot():绘制折线图,传入x、y数据,如plt.plot([1, 2, 3], [4, 5, 6])绘制简单折线,可设置线条颜色、样式等参数。
plt.scatter():绘制散点图,展示数据点分布,plt.scatter(x, y)用于分析变量间关系。 - 图表美化:
添加标题、标签: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()
(三)代码说明
- 模型定义:linear_func定义线性模型y=a*x + b,作为拟合的目标函数。
- 拟合过程:curve_fit 传入模型函数、x和y数据,得到拟合参数a和b。
- 可视化:用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()
(三)代码说明
- 图像读取:用PIL库读取图像并转为灰度模式,存储为numpy数组image_array。
- 滤波处理:ndimage.median_filter对图像数组进行中值滤波,size=3设置滤波器大小,去除图像噪声。
- 结果展示:通过matplotlib绘制原始和处理后图像,对比呈现图像处理效果,体现scipy在图像处理中的应用及与matplotlib的结合。
浙公网安备 33010602011771号