- 博客(104)
- 收藏
- 关注
原创 【并行计算】Python concurrent ——高效灵活并行计算的利剑
当你向执行器提交一个任务时,submit()方法返回一个Future对象。这个对象代表了一个尚未完成的计算。Executor是一个抽象基类,定义了提交任务和获取结果的标准接口。和都实现了这个接口。陷阱名称典型错误/场景根本原因解决方案中使用不可 pickle 的对象抛出向进程池提交的任务中包含不可被 pickle 序列化的对象,如嵌套函数、lambda 表达式、带有不可序列化属性的类实例等(进程间通信依赖 pickle 传递数据)。1. 将嵌套函数、lambda 移至模块顶层定义;
2025-09-19 13:34:41
985
原创 【并行计算】Joblib内存缓存操作:从入门到精通超详细教程
Joblib是Python的一个高效库,专为并行计算和内存缓存设计,特别适合科学计算和数据处理场景。高效并行计算:通过Parallel和delayed实现任务并行内存缓存:通过Memory类缓存计算结果,避免重复计算兼容性强:与Scikit-learn、NumPy等科学计算库无缝集成Memory自动缓存函数的计算结果根据输入参数判断是否需要重新计算减少重复计算,提高执行效率默认情况下,Memory使用函数参数的哈希值作为缓存键。# 自定义哈希函数# 不同输入但相同哈希值,会使用缓存。
2025-09-19 09:46:20
661
原创 【并行计算】Joblib 进行并行操作:从入门到精通的超详细教程
通过# 使用多线程# 使用多进程delayed:将函数调用延迟,生成任务队列Parallel:调度任务队列,执行并行计算。
2025-09-18 16:47:25
1470
原创 【并行计算】深入浅出理解多进程与多线程,玩转并行计算的核心
任务类型推荐方案原因CPU密集型多进程 (loky避免GIL,充分利用多核I/O密集型多线程 (threadingI/O等待时释放GIL,高效利用等待时间混合型分阶段处理I/O用多线程,CPU用多进程。
2025-09-18 16:18:43
788
原创 【并行计算】 CPU密集型任务与I/O密集型任务全面解析
定义:指主要耗费CPU资源进行计算的任务,CPU不断进行运算,几乎不等待外部输入。关键特征任务执行时CPU持续高负荷运行大部分时间在进行计算,很少等待外部资源任务完成时间主要取决于CPU的计算速度任务类型主要瓶颈优化重点Joblib配置建议CPU密集型任务CPU计算能力减少计算时间,利用多核并行n_jobs=-1(使用所有核心),(多进程)I/O密集型任务I/O设备速度(磁盘/网络)减少等待时间,提高并发处理能力n_jobs=32+(高并发),(多线程)混合型任务。
2025-09-18 15:33:29
862
原创 【并行计算】什么是Joblib?如何用Joblib提高工作效率?
内存缓存:避免重复计算,特别适合存储耗时的函数结果并行计算:简化CPU密集型任务的并行执行它最初是scikit-learn项目的一部分,后来独立成为一个通用工具库,特别在科学计算和机器学习领域广泛应用。# 注册自定义压缩器))Joblib是一个强大而简单的库,特别适合科学计算和机器学习中的重复计算和并行处理需求。它的内存缓存功能可以显著减少重复计算时间,而并行计算功能则能有效利用多核CPU资源。虽然在某些复杂场景下可能不如专用框架强大,但其简洁的API和高效的性能使其成为日常数据处理任务的优秀选择。
2025-09-18 11:53:51
473
原创 【Numpy基础】NumPy 的 indices 与 Python 的 slice:功能区别与适用场景
Slice(切片)是 Python 中的内置类型,用于表示序列的切片操作。它通常用在索引中,用于选择序列的子集。# 基本切片操作print(arr[1:4]) # 输出 [1, 2, 3]# 使用 slice 对象print(arr[s]) # 输出 [1, 2, 3]print(arr[2:7:2]) # 输出 [2 4 6]是 NumPy 库中的一个函数,用于生成一组表示网格索引的数组。它返回一个数组,其中每个元素都是其所在位置的索引值。
2025-09-15 15:51:05
724
原创 【Python基础】为什么 Python 的切片语法使用元组而非列表?
实际上,这种语法在内部被转换为使用slice# 多维数组的切片操作result = arr[:, 2, 1:3] # 这里的切片参数实际上被组合为元组特性元组 (Tuple)列表 (List)可变性不可变可变内存效率更高较低创建速度更快较慢哈希能力可哈希(如元素可哈希)不可哈希语义固定结构、记录动态集合安全性参数不会被意外修改可能被修改。
2025-09-15 15:36:49
664
原创 【Transformer详解】Transformer中的Q、K、V矩阵:形状必须一致吗?
矩阵对必须一致的维度可以不同的维度Q和K最后一维(特征维度)d_k序列长度seq_lenK和V序列长度seq_len最后一维(特征维度)Q和V无强制要求所有维度都可以不同Q和K的**最后一维(特征维度)**必须相同,否则无法计算QKTQK^TQKT。K和V的序列长度必须相同,否则无法计算注意力权重与V的乘积。V的最后一维可以任意,它决定了注意力输出的特征维度。理解这些形状关系对于正确实现和调试Transformer模型至关重要。
2025-08-28 14:25:06
942
原创 【Matplotlib学习】Matplotlib 中 x 轴和 y 轴的玩法大全:从基础到高级技巧
自定义刻度格式化函数return f'# 自定义刻度格式化函数 def custom_formatter(x , pos) : if x >= 1000 : return f' {
2025-08-27 13:58:54
545
原创 【Matplotlib学习】驾驭画布:Matplotlib 布局方式从入门到精通完全指南
方法适用场景灵活性易用性推荐度plt.plot()快速绘制单个图低极高⭐(仅用于探索)精确控制单个图位置,创建图中图中中⭐⭐(特殊需求)创建标准的多子图网格中高⭐⭐⭐⭐⭐(主力)GridSpec创建跨行/列的不规则复杂网格高中⭐⭐⭐⭐(高级)创建复杂布局(Matplotlib 3.3+)高高⭐⭐⭐⭐⭐(未来趋势)如何选择?只有一个图?使用或。有多个排列整齐的子图?永远首选。子图需要跨行或跨列?使用GridSpec或更直观的。需要在一个角落里放一个插入的小图?使用。
2025-08-27 11:51:18
800
原创 【Matplotlib学习】Matplotlib 多子图空间布局完全指南:从基础到高级技巧
手动定义每个轴的位置 [left, bottom, width, height]ax1 = fig.add_axes([0.1, 0.55, 0.35, 0.35]) # 左上ax2 = fig.add_axes([0.55, 0.55, 0.35, 0.35]) # 右上ax3 = fig.add_axes([0.1, 0.1, 0.8, 0.35]) # 底部# 圆形子图# 添加内容plt.show()调整方法调整对象关键参数说明适用场景子图间和图形边距padh_pad。
2025-08-27 11:06:02
1235
原创 Matplotlib 可视化大师系列(八):综合篇 - 在一张图中组合多种图表类型
组合多种图表类型是数据可视化的高级技能,可以极大地增强你的数据叙事能力。使用多个Axes对象创建复杂的网格布局使用inset_axes添加细节视图使用**twinx()/twiny()**显示不同量纲的数据遵循设计原则创建专业级的组合图表避免常见陷阱,创建清晰有效的可视化记住,最好的组合图表不是简单地堆砌多种图表类型,而是有目的地选择和组织视觉元素,以最有效的方式传达数据故事。每种添加的图表都应该有明确的目的和价值。至此,我们已经完成了Matplotlib可视化大师系列的全部内容。
2025-08-22 14:47:43
1231
原创 Matplotlib 可视化大师系列(七):专属篇 - 绘制误差线、等高线与更多特殊图表
误差线最佳实践明确误差类型:标准误差、标准差、置信区间等保持误差线简洁明了,避免过度装饰对于不对称误差,使用不同长度或样式的误差线等高线图最佳实践选择合适的等高线层级数量,太少会丢失细节,太多会显得混乱使用clabel()添加等高线数值标签考虑使用contourf()填充颜色提高可读性矢量场图最佳实践调整箭头密度和大小,避免过度拥挤使用颜色表示矢量大小,提供额外信息维度对于复杂场,考虑使用流线图(3D绘图注意事项Matplotlib的3D渲染性能有限,不适合大型数据集。
2025-08-22 14:43:28
804
原创 Matplotlib 可视化大师系列(六):plt.imshow() - 绘制矩阵与图像的强大工具
创建一些特殊分布的数据Z = np.exp(-X**2 - Y**2) + 0.1 * np.exp(-(X-2)**2 - (Y-2)**2) # 两个高斯分布的和# 1. 线性尺度# 2. 对数尺度 - 适合显示指数变化的数据# 3. 幂律尺度# 4. 自定义数据范围plt.show()核心功能:将二维数组可视化为伪彩色图像关键参数cmap(颜色映射),vminvmax(数据范围),(插值),norm(标准化)高级应用:热力图、科学数据可视化、矩阵分析最佳搭档(颜色条),
2025-08-22 14:40:11
947
原创 Matplotlib 可视化大师系列(五):plt.pie() - 展示组成部分的饼图
环形图(Donut Chart)是饼图的一种变体,中间有一个空洞,通常用于显示多个系列或使视觉效果更轻盈。# 数据# 先画一个普通的饼图pctdistance=0.85, # 百分比放远一点wedgeprops=dict(width=0.4, edgecolor='w') # 关键:width设置环的宽度# 在中心画一个白色的圆,使其看起来像环形图# 另一种添加中心文本的方法plt.show()# 数据# 创建一个颜色映射# 自定义百分比显示函数# 同时显示百分比和实际值。
2025-08-22 14:37:53
634
原创 Matplotlib 可视化大师系列(四):plt.hist() 与 plt.boxplot() - 洞察数据分布
plt.hist()和是探索数据分布不可或缺的工具。plt.hist(): 揭示整个分布的形状、中心和散布。关注密度和频率。核心参数binsdensitycumulative。: 总结分布的五个关键统计量,高效识别异常值和比较多个分布。核心参数whisnotch, 以及各种*props用于样式控制。掌握这两个函数,你就能从简单的数据描述(如均值、标准差)深入到理解数据的内在结构和特性,这是数据分析和机器学习模型构建的基础。在下一篇文章中,我们将探讨如何展示组成部分,使用plt.pie()来绘制饼图。
2025-08-22 14:35:34
752
原创 Matplotlib 可视化大师系列(三):plt.bar() 与 plt.barh() - 清晰对比的柱状图
plt.bar()和plt.barh()是进行数据对比的利器。核心功能: 用矩形的高度/长度表示类别数值的大小。关键参数xy(位置),heightwidth(数值),bottomleft(堆叠),color(样式)。高级应用: 分组柱状图、堆叠柱状图。关键技巧: 添加数值标签、排序数据、保持零基线。掌握柱状图,意味着你能够清晰、准确地展示数据之间的比较关系,这是数据故事中不可或缺的一环。在下一篇文章中,我们将深入探讨数据的分布,使用plt.hist()和来揭示数据背后的统计特性。
2025-08-22 14:32:43
1096
原创 Matplotlib 可视化大师系列(二):plt.scatter() - 探索变量关系的散点图
核心功能:展示两个连续变量间的关系,识别模式、聚类和异常值关键参数s(大小),c(颜色),marker(形状),alpha(透明度),cmap(颜色映射)高级应用:通过大小和颜色编码第三、第四个变量,处理大数据集最佳实践:使用透明度避免过度绘制,有意义地使用颜色,添加趋势线掌握散点图意味着你拥有了探索数据关系的第一件强大武器。它是任何数据分析项目的起点,能够为你提供初步的洞察,指导后续的深入分析。在下一篇文章中,我们将学习如何创建清晰的比较图表——柱状图。
2025-08-22 14:30:11
611
原创 Matplotlib 可视化大师系列(一):plt.plot() - 绘制折线图的利刃
plt.plot()是 Matplotlib 绘图的基石。它看似简单,却蕴含着巨大的灵活性。核心功能: 给定 (x, y) 坐标,描点连线。两种样式控制(快捷)和**kwargs(精细、推荐)。关键步骤: 提供数据、设置样式、添加标签标题图例、显示图形。掌握了plt.plot(),你就已经打开了 Matplotlib 可视化世界的大门。在下一篇文章中,我们将探索另一个强大的工具——,看看如何用它来揭示变量之间的深层关系。
2025-08-22 14:27:09
891
原创 【Numpy基础】全方位解析数组生成与复制机制
操作类型是否共享数据说明b = a赋值是b是a的别名,完全共享一切。视图是v是新对象,但数据与a共享。复制否c是新对象,拥有数据的独立副本。s = a[:]通常为视图是注意:NumPy 中的切片返回的是视图!复制否“花式索引”总是返回复制。复制否布尔索引也总是返回复制。视图是改变形状通常返回视图(如果内存连续)。t = a.T(转置)视图是转置返回视图。重要提醒Python 列表的切片list[:]是复制,但 NumPy 数组的切片arr[:]是视图!
2025-08-20 14:13:03
911
原创 【PyTorch基础】高级切片与索引完全指南:从基础到复杂张量操作
tindex操作结果形状索引逻辑核心差异(2,2)固定行,按index取列仅在指定维度(列)使用索引t[index](2,2,2)按index取整行,保留结构只索引行,保留原始列维度(2,2)行和列都用index索引行索引和列索引一一对应通过这些对比可以看出,PyTorch的索引机制非常灵活,相同的索引张量在不同操作中会产生截然不同的结果,核心区别在于索引作用的维度和组合方式。基础切片:高效视图操作,无数据拷贝高级索引:灵活但产生数据拷贝组合索引:混合使用不同索引类型专用函数。
2025-08-19 15:17:30
1028
原创 【PyTorch基础】广播机制详解:高效张量运算的秘诀
PyTorch广播机制是高效处理不同形状张量运算的核心特性:✅核心优势:减少显式复制、简化代码、提高内存效率✅关键规则:维度对齐、大小兼容、自动扩展✅应用场景:标量运算、归一化、损失函数、注意力机制⚠️注意事项:形状兼容性、大张量性能、正确使用expand/repeat掌握广播机制不仅能让你写出更简洁的PyTorch代码,还能深入理解深度学习框架的设计哲学。下次面对形状不同的张量运算时,不妨让广播机制为你智能处理!希望这篇博客能帮助你全面理解PyTorch广播机制!
2025-08-19 11:31:28
933
原创 【Python学习】Python文件路径处理:os.path.join vs f-string 深度解析
在Python开发中,正确处理文件路径是每个开发者必备的技能。和Pathlib提供的不仅仅是路径拼接,它们确保路径的正确性、安全性和可移植性。在大多数情况下,性能差异可以忽略不计。虽然简洁,但只应在明确知道目标平台且路径简单的情况下使用。更快,但这点微优化通常不值得牺牲代码的安全性和可移植性。:当处理文件路径时,始终使用专门设计的路径处理工具。📌 经验法则:如果路径包含变量或需要跨平台,永远选择。,并揭示它们的关键区别。
2025-08-18 11:42:01
753
原创 【深度学习基础】PyTorch Tensor生成方式及复制方法详解
内存共享与NumPy共享内存视图操作(如view()/切片)共享内存其他方法均创建独立副本梯度处理.clone()唯一保留梯度计算图copy_()会破坏目标Tensor的计算图创建新计算图使用场景需要梯度回传:使用.clone()高效数据覆盖:使用.copy_()完全独立拷贝:使用与NumPy交互:使用numpy()
2025-08-18 11:23:27
463
原创 【论文精读】Axiomatic Attribution for Deep Networks
摘要 本文提出一种新的深度网络归因方法——积分梯度(Integrated Gradients),通过满足敏感性(Sensitivity)和实现不变性(Implementation Invariance)两个基本公理,解决了现有方法的关键缺陷。该方法沿输入到基线的直线路径积分梯度,无需修改网络结构,实现简单高效。实验表明,积分梯度在图像、文本和化学模型中能有效识别关键特征,辅助模型调试和规则提取,提升模型可解释性。与梯度、DeepLift等方法相比,积分梯度具有理论保证且计算成本低,仅需调用标准梯度算子即可生
2025-07-21 16:31:49
576
原创 【深度学习基础】张量与Tensor的区别?从标量到深度学习的多维世界
本文系统梳理了数学与深度学习中张量(Tensor)的核心概念。数学中的张量是多重线性映射,强调坐标变换不变性,而深度学习中的Tensor是计算机实现的多维数组,支持自动微分和GPU加速。文章详细解析了标量(0阶)、向量(1阶)、矩阵(2阶)及高阶张量的特性与应用场景,并通过对比表指出两者的关键差异:数学张量是抽象实体,深度学习Tensor则注重计算效率。最后介绍了Tensor的创建、转换、运算等实操方法,为理解神经网络的数据结构提供了清晰框架。
2025-07-16 14:09:32
870
原创 【深度学习基础】PyTorch中model.eval()与with torch.no_grad()以及detach的区别与联系?
对比维度.detach()是否禁用梯度否是是(对特定张量)是否改变层行为是(Dropout/BatchNorm)否否是否共享数据否否是显存优化效果无直接影响显著优化(禁用计算图存储)局部优化(减少特定张量的显存占用)是否需要组合使用通常与一起使用通常与一起使用可单独使用,或与结合方法核心作用确保模型在评估阶段行为正确(如 Dropout、BatchNorm)。全局禁用梯度计算,减少显存和计算资源消耗。.detach()局部隔离梯度计算,保留数据但不参与反向传播。关键原则训练阶段。
2025-07-16 13:12:53
890
原创 【Linux学习】Ubuntu对用户进行管理
为什么要写这篇博客?如何添加用户?用户背添加到哪里?实际的存储路径是啥?添加到组里是什么意思?组是什么意思?为什么需要组?系统有哪些默认组?路径中的home、bin等等分别代表什么意思?为什么会有这个的存在?增加什么?用户名,用户id,用户密码,用户出生组,用户目录,用户权限等;删除什么?修改什么?用户名,用户id,用户密码,用户所在组,用户目录,用户权限等;查找什么?用户名,用户id,用户密码,用户所在组,用户目录,用户权限等;用户目录管理。
2025-05-19 16:26:22
1039
原创 【数据处理】Python对CMIP6数据进行插值——详细解析实现(附源码)
写在前面—为什么要写这篇博客?在气候科学和地球数据分析中,数据插值是一项基础且关键的任务。由于不同模型或观测数据的空间分辨率、层次结构存在差异,将数据统一到标准网格是后续分析的前提。本文结合一个实际的气候数据处理项目,详细介绍如何利用Python实现数据插值。代码主要功能包括:要想做好数据预处理,首先就要先了解CMIP6数据以及NC文件,关于CMIP6数据以及NC文件的的介绍可以参考:原始数据可能包含不规则网格或非标准变量名,预处理阶段需解决以下问题:查找变量:根据预定义的变量别名表(如可能对应、等),
2025-05-15 15:37:22
837
原创 【数据处理】xarray 数据处理教程:从入门到精通
输出结果五、数据可视化表:可视化方法操作/方法功能输入参数输出参数.plot()快速可视化(等值线图、色阶图)xy: 维度名;: 颜色条参数;transform: 投影转换对象散点图可视化xy: 维度名;c: 颜色变量;size: 点大小对象示例代码# 绘制等值线图# 绘制散点图读取数据→ 2.访问变量→ 3.选择/切片→ 4.计算/分析→ 5.保存/可视化。
2025-05-14 15:28:05
1776
原创 【数据处理】 深入解析CMIP6数据与NetCDF(NC)文件:从入门到精通玩转NC文件!
小编最近在做一个气候项目,然后需要用到CMIP6数据,这个数据集里全是.nc文件,作为一个程序猿,小编也是第一次遇到这种文件,本着用什么学什么的原则,既然我们用到了,那就简单学习总结一下吧,如有不对的地方,还请各位读者指出!CMIP6网址第六次国际耦合模式比较计划(Coupled Model Intercomparison Project Phase 6,CMIP6)是当前全球气候研究的重要数据来源。
2025-05-13 12:01:51
1194
原创 【数据处理】NetCDF 文件:从入门到精通
NetCDF(Network Common Data Form)是一种自描述、平台无关、二进制格式的数据文件,广泛应用于气象、海洋、地球科学等领域。它能够存储多维科学数据(如时间、纬度、经度、高度等),并且自带元数据信息,便于数据交换和共享。(1) 坐标变量(Coordinate Variables)定义:与维度同名的一维变量,用于描述该维度的物理坐标。示例:# 定义维度# 创建坐标变量lat[:] = np.arange(-90, 90, 2.5) # 纬度值。
2025-05-13 11:53:55
1669
原创 【数据处理】精通 Pandas:从理论到实践的完整指南
Pandas 是基于 NumPy 构建的开源库,提供了高效的数据结构和数据分析工具。其核心数据结构是DataFrame(二维表格型数据结构)和Series(一维数组)。Pandas 的设计目标是让数据操作像 Excel 或 SQL 表一样直观。语句参数说明说明示例df.head(n)n:显示的行数(默认5)查看前 n 行数据df.head(3)df.tail(n)n:显示的行数(默认5)查看后 n 行数据df.tail(2)df.info()无参数。
2025-05-13 10:44:33
838
原创 【包的问题】路径是正确的,为什么会导入失败?如何科学的设置包的路径?
不知道大家有没有遇到过这种问题,在本地电脑上倒入自己定义的包没有任何问题,但是一到服务器上就报错,这到底是什么问题呢?于是小编总结了下面的解决方法,希望可以帮助你解决问题!推荐使用方法1:直接修改脚本,动态添加项目根目录到路径,兼容性最佳。若使用相对导入(方法2),需通过python -m运行脚本,避免直接执行子目录中的文件。方法3适合临时调试,但需每次设置环境变量。一定要注意自定义包的命名!在一个项目中,包含多个自定义包的时候一定要采用绝对路径,不然可能会报错!
2025-05-06 15:25:11
1076
原创 【python画图】:从入门到精通绘制完美柱状图
配色方案:使用seaborn颜色主题标签处理:自动旋转长标签输出格式:矢量图优先通过掌握这些技巧,你可以轻松制作出适合学术论文、商业报告等各种场景的专业级柱状图。建议保存参数速查表作为日常参考,并多加实践不同参数的组合效果。
2025-04-17 17:18:09
1985
1
原创 【Python画图】从入门到精通:如何画好折线图?
以下是对Python绘制折线图可配置参数的全面总结表格,分为核心参数样式参数坐标轴设置高级方法。
2025-04-16 10:50:36
1819
1
原创 【Python基础】深入浅出讲明白如何用Python画好各种图
不知道看到这篇博客的小伙伴是遇到什么问题才来看我这边篇博客,为了不浪费大家的时间,博主先简单介绍一下为什么要写这篇博客。博主最近在画图,但是遇到一个问题,就是相似的图要画很多遍,可能就只是稍微改几个参数,几行代码,这样子写几个方法的话代码重复率太高了,于是乎博主想写一个万能的画图代码,该代码只需要完成基本参数的设置,其他的无需改动,可以实现自动画图。为了实现该想法,我们就必须要知道画图需要提供什么,所以本篇博客将会先介绍plt的一些基本用法,了解这些用法之后再将其转化为我们的目标代码。功能。
2025-04-15 20:45:34
970
原创 【Python】列表的创建:[[] for _ in range(2)] 与 [[]] * 2有什么区别?
2Why?????我想要的效果是mean_value存储两个数据的平均值,理论上来说shape应该是(2,1,3,1),但是这里为什么是(2,2,3,1)???输出:(2, 1, 3, 1)问题成功解决了!那么这两种创建列表的方式有什么不同呢?于是小编做了如下总结!list在 Python 中,列表的创建和复制行为分为浅复制(Shallow Copy)和深复制(Deep Copy)。它们的核心区别在于对嵌套对象(如子列表、字典等)的处理方式。1. 浅复制(Shallow Copy)
2025-04-15 19:27:26
751
原创 【学习笔记】深入浅出详解Pytorch中的View, reshape, unfold,flatten等方法。
最近在解析transformer源码的时候突然看到了unfold?我在想unfold是什么意思?为什么不用reshape,他们的底层逻辑有什么区别呢?于是便相对比一下他们之间的区别,便有了本篇博客,希望对大家有帮助!torch.unfold 的作用:从张量的某个维度提取滑动窗口。常用参数:dimension(展开维度)、size(窗口大小)、step(步长)。应用场景:卷积操作、图像处理、时间序列分析等。注意事项:选择合适的维度、窗口大小和步长,避免内存消耗过大。
2024-12-17 09:49:55
1748
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人