Python Cheat Sheet科学计算:NumPy与SciPy完全指南

Python Cheat Sheet科学计算:NumPy与SciPy完全指南

【免费下载链接】pysheeet Python Cheat Sheet 【免费下载链接】pysheeet 项目地址: https://gitcode.com/gh_mirrors/py/pysheeet

你是否还在为Python科学计算中的数组操作、线性代数运算而烦恼?本文将系统介绍NumPy与SciPy两大科学计算库的核心功能,帮助你快速掌握数据处理、矩阵运算、统计分析等关键技能。读完本文,你将能够独立完成从数据加载到复杂科学计算的全流程任务。

NumPy基础:多维数组操作

NumPy(Numerical Python)是Python科学计算的基础库,提供了高效的多维数组对象和数学函数。其核心是ndarray(N维数组),支持矢量运算和广播机制,大幅提升计算效率。

数组创建与属性

NumPy提供多种创建数组的方法,常用的包括从列表转换、生成特定分布数组等。数组的核心属性包括维度(ndim)、形状(shape)、数据类型(dtype)和大小(size)。

import numpy as np

# 从列表创建数组
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape)  # 输出 (2, 3),表示2行3列
print(a.ndim)   # 输出 2,表示二维数组
print(a.dtype)  # 输出 int64,元素数据类型
print(a.size)   # 输出 6,元素总数

# 创建特殊数组
zeros = np.zeros((3, 4))  # 3行4列全0数组
ones = np.ones((2, 3), dtype=np.int16)  # 2行3列全1数组,指定int16类型
arange = np.arange(10, 30, 5)  # 从10开始,步长5,到30结束:[10 15 20 25]
linspace = np.linspace(0, 2*np.pi, 100)  # 0到2π间均匀生成100个数

数组索引与切片

NumPy数组支持多种索引方式,包括整数索引、切片、布尔索引和花式索引,满足不同场景下的数据访问需求。

# 二维数组索引与切片
a = np.arange(12).reshape(3, 4)  # 创建3行4列数组
print(a[1, 2])  # 输出 6,访问第2行第3列元素(0基索引)
print(a[:, 1])  # 输出 [1 5 9],获取第2列所有元素
print(a[1:3, :])  # 输出 [[4 5 6 7] [8 9 10 11]],获取第2-3行所有列

# 布尔索引
mask = a > 5
print(a[mask])  # 输出 [6 7 8 9 10 11],获取所有大于5的元素

# 花式索引
indices = [0, 2]
print(a[indices, :])  # 输出 [[0 1 2 3] [8 9 10 11]],获取第1和第3行

数组运算与广播

NumPy支持元素级运算、矩阵运算和广播机制,无需循环即可实现高效计算。

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

# 元素级运算
print(a + b)  # 加法:[[ 6  8] [10 12]]
print(a * b)  # 乘法:[[ 5 12] [21 32]]
print(a ** 2)  # 平方:[[ 1  4] [ 9 16]]

# 矩阵运算
print(a @ b)  # 矩阵乘法:[[19 22] [43 50]]
print(a.dot(b))  # 同上
print(np.matmul(a, b))  # 同上

# 广播机制:不同形状数组的运算
c = np.array([10, 20])
print(a + c)  # 广播加法:[[11 22] [13 24]]

SciPy进阶:科学计算工具集

SciPy基于NumPy构建,提供了更丰富的科学计算功能,涵盖线性代数、优化、信号处理、统计分析等多个领域,是科研和工程计算的得力工具。

线性代数模块(scipy.linalg)

SciPy的线性代数模块提供了矩阵分解、求逆、特征值计算等高级功能,比NumPy的对应模块更全面。

from scipy import linalg

# 矩阵求逆
a = np.array([[1, 2], [3, 4]])
inv_a = linalg.inv(a)
print(inv_a)  # 输出 [[-2.   1. ] [ 1.5 -0.5]]

# 特征值与特征向量
eigenvalues, eigenvectors = linalg.eig(a)
print(eigenvalues)  # 特征值:[-0.37228132  5.37228132]
print(eigenvectors)  # 特征向量矩阵

# 奇异值分解(SVD)
u, s, vh = linalg.svd(a)
print(u)  # 左奇异向量
print(s)  # 奇异值
print(vh)  # 右奇异向量

统计分析模块(scipy.stats)

scipy.stats提供了丰富的概率分布、统计检验和描述性统计功能,适用于数据分析和建模。

from scipy import stats

# 正态分布
norm = stats.norm(loc=0, scale=1)  # 均值为0,标准差为1的正态分布
print(norm.pdf(0))  # 输出 0.3989422804014327,概率密度函数在0处的值
print(norm.cdf(1))  # 输出 0.8413447460685429,累积分布函数在1处的值
print(norm.rvs(size=5))  # 生成5个随机样本:[-0.123  1.456 -0.789  0.345  2.101](示例)

# 描述性统计
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
print(stats.describe(data))  # 输出数据的基本统计信息:均值、标准差、最小值、最大值等
print(stats.pearsonr(data, data*2+1))  # 输出相关系数和p值:(1.0, 0.0)

实际应用:数据处理与可视化

结合NumPy、SciPy和Matplotlib,可完成从数据加载、处理到可视化的全流程分析。以下是一个简单的示例,展示如何使用这些库进行数据拟合和绘图。

import numpy as np
from scipy import optimize
import matplotlib.pyplot as plt

# 生成带噪声的数据
x = np.linspace(0, 10, 100)
y_true = 2 * x + 1
noise = np.random.normal(0, 1, 100)
y = y_true + noise

# 线性拟合
def linear_func(x, a, b):
    return a * x + b

params, params_covariance = optimize.curve_fit(linear_func, x, y)
a, b = params
print(f"拟合参数:a={a:.2f}, b={b:.2f}")  # 输出接近2和1的结果

# 绘图
plt.figure(figsize=(10, 6))
plt.scatter(x, y, label='带噪声数据', alpha=0.6)
plt.plot(x, y_true, 'r-', label='真实曲线')
plt.plot(x, linear_func(x, a, b), 'g--', label=f'拟合曲线: y={a:.2f}x+{b:.2f}')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.title('线性回归拟合示例')
plt.grid(True)
plt.show()

总结与扩展

本文介绍了NumPy的多维数组操作和SciPy的核心功能,涵盖了科学计算的基础知识。实际应用中,还可结合Pandas进行数据处理、Scikit-learn进行机器学习建模,构建更复杂的数据分析 pipeline。建议进一步学习官方文档以深入掌握高级特性:

通过不断实践,你将能熟练运用这些工具解决实际的科学计算问题,提升数据处理和分析效率。

【免费下载链接】pysheeet Python Cheat Sheet 【免费下载链接】pysheeet 项目地址: https://gitcode.com/gh_mirrors/py/pysheeet

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值