读书报告
一、库的基本函数用法
(一)numpy
numpy 是 Python 科学计算的基础库,提供了高性能的多维数组对象以及用于处理数组的函数。
1.创建数组:使用numpy.array()函数可以将列表转换为数组,例如import numpy as np; a = np.array([1, 2, 3])。还可以通过np.zeros((3, 3))创建全零的 3×3 数组,np.ones((2, 4))创建全 1 的 2×4 数组。
2.数组运算:numpy 支持数组间的算术运算,如a = np.array([1, 2, 3]); b = np.array([4, 5, 6]); c = a + b,实现对应元素相加。同时也支持数学函数运算,像np.sin(a)对数组a中的每个元素求正弦值 。
3.索引与切片:和 Python 列表类似,如a = np.array([1, 2, 3, 4, 5]); print(a[1:4]),输出[2 3 4]。
(二)scipy
scipy 建立在 numpy 之上,提供了丰富的科学计算工具,涵盖优化、积分、插值等功能。
1.数值积分:scipy.integrate.quad()用于一元函数的数值积分,例如计算函数
在区间 [0, 1] 上的积分,from scipy.integrate import quad; result, error = quad(lambda x: x**2, 0, 1); print(result)。
2.信号处理:scipy.signal模块提供滤波、卷积等功能,import scipy.signal; b, a = scipy.signal.butter(4, 0.1, 'low');可创建一个 4 阶低通巴特沃斯滤波器。
(三)pandas
pandas 主要用于数据处理和分析,提供了Series和DataFrame数据结构。
1.数据结构创建:import pandas as pd; s = pd.Series([1, 3, 5, np.nan, 6, 8])创建一个Series对象;data = {'name': ['Alice', 'Bob'], 'age': [25, 30]}; df = pd.DataFrame(data)创建一个DataFrame对象。
2.数据读取与写入:df = pd.read_csv('data.csv')读取 CSV 文件数据,df.to_excel('output.xlsx')将数据写入 Excel 文件。
3.数据处理:df.dropna()可删除包含缺失值的行,df.groupby('name').sum()可按name列分组并对数值列求和。
(四)matplotlib
matplotlib 是 Python 的绘图库,用于创建各种静态、动态、交互式的可视化图表。
1.基本绘图:import matplotlib.pyplot as plt; x = np.linspace(0, 10, 100); y = np.sin(x); plt.plot(x, y); plt.xlabel('x'); plt.ylabel('y'); plt.title('Sin Wave'); plt.show()绘制正弦曲线。
2.子图绘制:fig, axs = plt.subplots(2, 2); axs[0, 0].plot(x, y); axs[0, 1].scatter(x, y);在一个画布上绘制多个子图。
二、具体问题求解
假设有一个问题:计算某班级学生的数学、英语、语文成绩的平均分,并找出每个学生的总分最高科目。数据存储在scores.csv文件中,格式如下:
张三,数学85,英语90,语文78;李四,数学92,英语88,语文95
使用 Python 解决该问题:
import pandas as pd
读取数据
df = pd.read_csv('scores.csv')
计算各科平均分
math_avg = df['数学'].mean()
english_avg = df['英语'].mean()
chinese_avg = df['语文'].mean()
print(f"数学平均分: {math_avg}")
print(f"英语平均分: {english_avg}")
print(f"语文平均分: {chinese_avg}")
找出每个学生的总分最高科目
df['最高科目'] = df[['数学', '英语', '语文']].idxmax(axis=1)
print(df[['姓名', '最高科目']])
三、图像处理
使用 numpy 和 matplotlib 进行简单的图像处理。读取一张图片,将其转换为灰度图像,并显示处理前后的图像:
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
读取图片
image = Image.open('test.jpg')
image_array = np.array(image)
转换为灰度图像
gray_image_array = np.dot(image_array[..., :3], [0.2989, 0.5870, 0.1140])
显示原始图像和灰度图像
plt.subplot(1, 2, 1)
plt.imshow(image)
plt.title('Original Image')
plt.subplot(1, 2, 2)
plt.imshow(gray_image_array, cmap='gray')
plt.title('Gray Image')
plt.show()