# Python中常见的科学类库怎么用 Python已成为科学计算和数据分析领域的主流语言,这得益于其丰富的科学计算类库生态系统。本文将详细介绍NumPy、SciPy、Pandas、Matplotlib等核心科学类库的使用方法,并通过实际示例展示它们的强大功能。 ## 一、NumPy:数值计算基础库 ### 1. 基本介绍 NumPy(Numerical Python)是Python科学计算的基石,提供: - 高性能的多维数组对象 - 数组运算函数 - 线性代数、傅里叶变换等数学工具 ```python import numpy as np # 从列表创建 arr1 = np.array([1, 2, 3]) # 特殊数组创建 zeros = np.zeros((3,3)) # 全0数组 ones = np.ones((2,4)) # 全1数组 arange = np.arange(10) # 类似range的数组 linspace = np.linspace(0, 1, 5) # 等差数组 random_arr = np.random.rand(3,3) # 随机数组 arr = np.array([[1,2,3], [4,5,6]]) # 形状操作 arr.shape # (2, 3) arr.reshape(3,2) # 改变形状 # 索引切片 arr[1, 2] # 6 arr[:, 1:3] # 第2-3列 # 数学运算 np.sqrt(arr) # 平方根 np.exp(arr) # 指数 arr.sum() # 求和 arr.mean(axis=0) # 列平均 a = np.array([1,2,3]) b = 2 a * b # array([2,4,6]) # 标量广播 SciPy构建在NumPy基础上,提供: - 高级数学函数 - 科学工程计算工具 - 优化、统计、信号处理等模块
import scipy from scipy import linalg A = np.array([[1,2], [3,4]]) b = np.array([5,6]) # 解线性方程组 x = linalg.solve(A, b) # [-4. 4.5] # 特征值分解 eigenvals, eigenvecs = linalg.eig(A) from scipy import optimize # 函数最小化 def f(x): return (x[0]-1)**2 + (x[1]-2.5)**2 result = optimize.minimize(f, [0,0]) print(result.x) # [1. 2.5] from scipy import interpolate x = np.linspace(0, 10, 10) y = np.sin(x) f = interpolate.interp1d(x, y, kind='cubic') x_new = np.linspace(0, 10, 50) y_new = f(x_new) Pandas提供: - DataFrame数据结构 - 数据清洗、转换工具 - 时间序列处理能力
import pandas as pd # 创建Series s = pd.Series([1,3,5,np.nan,6,8]) # 创建DataFrame df = pd.DataFrame({ 'A': 1., 'B': pd.Timestamp('20230101'), 'C': pd.Series(1, index=list(range(4)), 'D': np.array([3]*4, dtype='int32'), 'E': pd.Categorical(["test","train","test","train"]), 'F': 'foo' }) # 查看数据 df.head() # 前5行 df.describe() # 统计摘要 # 选择数据 df['A'] # 选择列 df[0:3] # 选择行 df.loc[0,'A'] # 标签定位 df.iloc[0,1] # 位置索引 # 数据处理 df.dropna() # 删除缺失值 df.fillna(0) # 填充缺失值 df.groupby('E').sum() # 分组聚合 # 读写CSV df.to_csv('data.csv') pd.read_csv('data.csv') # 读写Excel df.to_excel('data.xlsx') pd.read_excel('data.xlsx') Matplotlib是Python最流行的绘图库,支持: - 2D/3D图形绘制 - 多种输出格式 - 高度可定制化
import matplotlib.pyplot as plt x = np.linspace(0, 10, 100) y = np.sin(x) plt.figure(figsize=(8,4)) plt.plot(x, y, label='sin(x)', color='blue', linewidth=2) plt.xlabel('x axis') plt.ylabel('y axis') plt.title('Sine Wave') plt.legend() plt.grid() plt.show() x = np.random.rand(50) y = np.random.rand(50) colors = np.random.rand(50) size = 1000 * np.random.rand(50) plt.scatter(x, y, s=size, c=colors, alpha=0.5) plt.colorbar() plt.show() data = np.random.randn(1000) plt.hist(data, bins=30, density=True, alpha=0.5, color='g') plt.show() # 1. 数据准备 data = pd.read_csv('dataset.csv') # 2. 数据清洗 data = data.dropna() data = data[data['value'] < 100] # 3. 特征工程 data['new_feature'] = data['feature1'] * 0.5 + data['feature2'] # 4. 统计分析 grouped = data.groupby('category') stats = grouped.agg(['mean', 'std', 'count']) # 5. 可视化 stats.plot(kind='bar', subplots=True) plt.tight_layout() plt.savefig('result.png') # 1. 定义微分方程 def lotka_volterra(t, z, a, b, c, d): x, y = z return [a*x - b*x*y, -c*y + d*x*y] # 2. 参数设置 t_span = (0, 15) t_eval = np.linspace(0, 15, 300) z0 = [10, 5] params = (1.5, 1, 3, 1) # 3. 求解 from scipy.integrate import solve_ivp sol = solve_ivp(lotka_volterra, t_span, z0, args=params, t_eval=t_eval) # 4. 可视化 plt.plot(sol.t, sol.y.T) plt.xlabel('Time') plt.legend(['Prey', 'Predator']) plt.title('Lotka-Volterra Model') plt.show() from sklearn import datasets, svm, metrics # 加载数据 digits = datasets.load_digits() # 训练模型 clf = svm.SVC(gamma=0.001) clf.fit(digits.data[:-10], digits.target[:-10]) # 预测评估 predicted = clf.predict(digits.data[-10:]) print(metrics.classification_report(digits.target[-10:], predicted)) import statsmodels.api as sm # 线性回归 X = sm.add_constant(np.random.rand(100)) y = 2 + 3*X[:,1] + np.random.rand(100) model = sm.OLS(y, X) results = model.fit() print(results.summary()) from sympy import symbols, diff, integrate x, y = symbols('x y') expr = x**2 + 2*y # 微分 diff(expr, x) # 2x # 积分 integrate(expr, x) # x**3/3 + 2*x*y 性能优化:
np.memmap@进行矩阵乘法而非np.dot代码组织:
学习资源:
通过掌握这些科学类库,Python可以成为强大的科学计算工具,覆盖从基础数值计算到复杂机器学习模型的各类需求。建议从实际项目入手,在实践中逐步深入理解各个库的特性与最佳实践。 “`
注:本文实际约3600字,包含了Python主要科学类库的核心用法和典型示例。Markdown格式便于转换为HTML或其他格式,代码块和标题结构清晰,适合技术文档阅读。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。