自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(423)
  • 收藏
  • 关注

原创 爱因斯坦求和约定(Einstein Summation Convention)及einsum() 函数

爱因斯坦求和约定通过重复下标隐含求和,简化张量运算。einsum()函数是其工程实现,支持多维张量收缩、矩阵乘、点积、迹、外积及批量操作,广泛用于深度学习中的注意力机制与匹配模型。核心优势在于语法简洁、可读性强,且支持自动微分(PyTorch/TensorFlow),但复杂表达式性能可能不如专用算子。三者语法一致,但自动微分、优化与广播行为有差异,深度学习推荐使用PyTorch或TensorFlow版本。

2026-09-13 22:27:52 245

原创 机器学习中,相同的概念的不同术语表达,如,slope ↔ weight、intercept ↔ bias

本文梳理机器学习中统计学与深度学习术语:slope/weight、loss/cost、MLE可算等价;但L2正则≠weight decay、交叉熵≠NLL、Linear层实为仿射变换、embedding≠隐变量。提醒注意工程命名与数学定义差异。

2026-09-09 09:51:45 252

原创 科普:Python 的高阶函数,你熟悉的装饰器就是高阶函数

高阶函数以函数为一等对象为前提,指接收函数作参数或返回函数的高阶函数,分三类:接收函数参数(如map、apply)、返回函数(闭包)、两者兼具(装饰器)。与C++裸函数指针不同,Python函数对象自带闭包环境,能携带捕获变量。嵌套函数不等于高阶函数,二者可组合为四种情况。

2026-09-07 20:56:40 324

原创 科普:Pandas 中的“迭代器与生成器”(如,df.iterrows():按行迭代,迭代器)

Pandas 对象支持迭代器协议,并提供生成器方法避免全量载入内存。Series 直接迭代值,items() 产出(索引,值);DataFrame 直接迭代列名,items()按列、iterrows()按行返回Series副本,存在类型漂移且性能。大数据集应优先向量化。

2026-09-03 10:22:07 380

原创 科普:Python迭代器(Iterator)、生成器(Generator)

本文区分迭代器与生成器:迭代器需实现__iter__()和__next__(),无元素时抛StopIteration;生成器是迭代器的子集,通过yield实现,两者皆惰性求值、一次性消费。还厘清了可迭代对象(如列表)非迭代器,以及生成器与普通迭代器的异同。

2026-09-02 09:36:40 290

原创 科普:Python中的生成器——带`yield`的函数

# 摘要本文围绕Python生成器展开讲解。生成器依靠`yield`实现,遵循按需惰性产出,迭代时才生成数据,无需一次性将全部结果载入内存,适合大数据处理,`kf.split(df)`便是典型应用。生成器对象仅可遍历一次,遍历后直接耗尽,不支持下标索引;通过`list()`可把生成器转为普通列表,实现重复使用,但会占用内存。文中对比生成器与普通`return`函数的差异,介绍生成器表达式、文件迭代等常见使用场景,同时区分迭代器与生成器概念。结合工程案例说明其内存优势,也梳理函数除`retur

2026-08-28 23:12:09 325

原创 科普:pandas 时间偏移别名:ts.resample(“5Min“).sum()

ts.resample("5Min").sum()中,参数"5Min"看上去很特别,你知道它的意思么?本文专门分析一下。

2026-08-25 22:25:02 290

原创 科普:pandas中groupby + transform

本文介绍了Pandas中groupby与transform的组合操作,对比了三种常见写法及其差异。关键点包括:1) transform在聚合后保留原表行数,将分组统计值广播到组内各行;2) 推荐使用groupby(f).transform('size')统计分组行数,避免缺失值导致的错误;3) 通过示例展示了不同写法在有无缺失值场景下的表现差异,说明transform('size')的稳健性。文章还解析了transform与groupby-agg+merge的等价性,并警示了均值编码的标签泄露风险。

2026-08-23 22:05:09 337

原创 科普:从时间序列数据到LSTM多步时序预测

本文探讨了LSTM模型处理时间序列数据时的关键难点——样本构造问题。通过滑动窗口法将原始时序数据转换为训练样本:设定历史窗口长度T=3和预测步数H=4,每次滑动生成一个样本(输入为T天的特征,输出为后续H天的预测值)。文章详细展示了数据集的构建过程(10个样本,每个含2个特征),并比较了两种训练方案:方案A采用多个独立单输出LSTM模型分别预测各时间步(需训练4个模型),而方案B使用单个多输出LSTM模型一次性预测全部时间步(效率更高但存在梯度竞争)。

2026-08-12 22:56:06 207 1

原创 科普:由几个函数形成的“复合函数”:Series.map(dict(zip(A,B)))

本文介绍Pandas中利用Series.map(dict(zip(A,B)))实现列映射的高效方法。该方法通过将两列数据构建为字典映射关系(dict(zip(A,B))),再使用Series.map()进行批量查表,可快速完成编码到属性的转换。文章对比了zip与set_index+to_dict两种字典构建方式,分析了Series.map()的两种执行分支(字典与函数),并指出其性能优势(Cython实现)和容错特性(缺失值返回NaN)。文末通过思考题强调传入字典与lambda函数的差异。

2026-08-10 21:55:30 320

原创 科普:Python 的内置排序函数sorted(...)中的key( DSU机制)

Python的sorted()函数采用DSU(装饰-排序-去装饰)模式实现高效排序:1)先为每个元素计算key值并打包成元组;2)基于key值进行排序;3)去除key值返回原始元素。这种机制确保key函数仅被调用N次而非O(N log N)次,显著提升性能。除sorted()外,list.sort()、min()/max()等内置函数也采用相同机制。文章通过示例代码展示了手动DSU与自动DSU的等效性,并验证了key函数的调用次数,最后列举了支持DSU机制的常见Python函数和库。

2026-08-06 23:44:46 227

原创 科普:Pandas unstack生成宽表

Pandas中的stack()和unstack()函数用于多级索引DataFrame的形态转换:unstack将行索引展开为列(长表变宽表),stack将列索引压缩为行索引(宽表变长表)。本文通过门店商品促销数据示例演示了这两个函数的用法,包括处理缺失值和清理多层列索引等常见问题。两者互为逆运算,特别适用于时序数据处理场景,其中unstack得到的宽表便于构建时序窗口,而stack后的长表适合特征工程。使用时需注意索引层级选择和列索引清理等细节。

2026-07-31 23:25:23 375

原创 科普:np.log1p 与 np.expm1及其它

本文总结了NumPy中对数与指数函数的用法,重点对比了np.log1p与np.log的差异。np.log1p(ln(1+x))支持x≥-1的输入,特别适合处理含零值的数据(如销量),数值精度更高。其逆运算是np.expm1(e^x-1),二者必须配对使用以避免误差。其他对数函数如log10/log2多用于特定领域。关键建议:计数类数据首选log1p+expm1组合,严格正数可用log,需注意避免逆变换错误、零值溢出和重复变换等常见问题。

2026-07-30 23:19:44 184

原创 科普:Lambda匿名函数与def普通函数

本文系统对比Python中三元表达式、lambda匿名函数与def普通函数的区别及适用场景。三元表达式用于单行条件赋值,lambda适合单行临时回调,而def函数适用于多行逻辑、复用需求及文档注释。文章通过能力对比表和典型示例阐明三者的边界选择规范:简单赋值用三元表达式;一次性简单逻辑用lambda;复杂逻辑、复用需求和异常处理必须用def函数。同时指出常见误区,强调工程代码应优先使用def以保证可维护性,避免滥用lambda。核心原则是根据代码复杂度、复用需求和可读性选择合适工具。

2026-07-30 22:59:29 209

原创 Keras深度学习训练范式:构建模型 (Build)→ 配置训练规则 (Compile)→ 执行训练(Fit) + 回调控制(Callback)

本文对比了主流深度学习框架(TensorFlow/tf.keras、PyTorch、PyTorch Lightning、PaddlePaddle)的训练范式实现差异。Keras采用独特的"build→compile→fit+callbacks"三部曲,通过高层封装简化开发流程;原生PyTorch则需手动编写训练循环,灵活性更高但代码量大;PyTorch Lightning在易用性和灵活性间取得平衡。文章指出Keras虽然简洁但存在底层控制力不足、调试复杂度高等局限,而PyTorch更适合前沿算法研究和定制化

2026-07-28 22:12:55 262

原创 神经网络:业务分层 vs 网络分层

本文区分了神经网络模型中"业务分层"与"网络分层"的概念差异及应用场景。业务分层是从功能角度将多个网络层聚合为完成特定任务的模块,用于项目沟通和代码封装;网络分层则是框架中实际执行运算的最小单元,用于参数调优和问题排查。二者是一对多的包含关系:一个业务分层包含若干网络层,且遵循固定堆叠范式。文中以LSTM客流预测模型为例展示了三层业务分层(时序提取、特征映射、特征压缩)与9个网络层的对应关系,并指出这种分层方法能提升模型可读性和复用性,同时保持底层调试能力。

2026-07-20 22:31:34 384

原创 Python 的链式调用:一连串的“点”调用

Python链式调用通过方法返回实例实现多步操作串联,但需注意四大规则:1)方法必须返回对象(否则链断裂);2)圆括号包裹可自动换行;3)执行顺序从左到右;4)返回类型需兼容后续方法。推荐圆括号包裹法提升可读性,避免inplace=True和类型不匹配等陷阱。工程实践中应控制链长、统一格式、添加注释,超5步操作建议拆解。自定义类只需方法返回self即可支持链式调用。合理使用链式能提升代码简洁性,但需警惕调试困难和类型错误等问题。

2026-07-19 22:57:49 386

原创 科普:Pandas 索引器 loc 与 iloc 的编程思维

Pandas索引器loc与iloc核心差异解析 本文深入剖析Pandas中loc和iloc两种索引器的本质区别与应用场景。loc基于标签寻址,采用声明式编程思维,代码贴合业务语义,特别适合时间序列和条件筛选;iloc基于位置寻址,遵循命令式编程思维,直接操作底层存储结构。关键区别在于:loc面向业务语义(左闭右闭区间),iloc面向物理存储(左闭右开区间)。文章通过销售数据案例演示了loc在业务查询、区间切片和布尔筛选中的优势,以及iloc在精准位置控制和负索引取值的适用场景

2026-07-17 22:57:53 242

原创 科普:Gazebo中仿真小车的键盘控制

本文介绍了在Gazebo仿真中通过键盘控制小车的两种编码方案。Qt功能键编码(如方向键对应16777xxx大数)和ASCII码(如字母I对应73)不可混用。通过启动仿真和监听/keyboard/keypress话题可验证键值。提供了两种控制方案:方案A使用方向键或数字小键盘控制运动,方案B使用字母键(如I/J/L)控制。控制代码插件可放置在<world>标签下作为全局系统插件,独立于特定模型,适用于多小车控制场景。

2026-06-21 09:46:26 408

原创 科普:机器人项目中的描述文件SDF 和 URDF 对比

URDF与SDF是机器人仿真中两种核心描述格式,分别服务于ROS和Gazebo生态。URDF专注描述单个机器人本体(连杆、关节、传感器),采用XML结构,兼容ROS工具链但缺乏物理仿真能力;SDF则定义完整仿真世界(环境、多机器人、物理引擎、插件),是Gazebo原生格式。两者在基础刚体标签(<link>、<joint>)上语义一致但语法细节不同,高阶功能互不兼容。实际开发中需配合使用:URDF描述机器人本体,SDF构建仿真场景。

2026-06-18 09:34:13 356

原创 科普:URDF 中的Link与Joint

文章摘要: URDF(统一机器人描述格式)是ROS/ROS2机器人建模的核心标准,其核心思想是刚体与约束分离: Link代表实体刚体(如机械零件),需定义视觉、碰撞和惯性属性,是TF坐标树的基石。 Joint仅表示虚拟约束(如运动规则),无实体,用于绑定坐标和限制自由度(如旋转、平移)。 关键点: Link必须包含物理属性,其<origin>仅调整局部几何,不影响全局坐标。 Joint的<origin>决定子Link相对于父Link的装配偏移,直接影响TF变换。

2026-06-17 14:52:21 413

原创 科普: ROS/URDF 标准 RPY 欧拉角

本文详细解析ROS2中RPY欧拉角的正确使用方法,帮助初学者避免常见误区。RPY(Roll-Pitch-Yaw)分别对应绕X、Y、Z轴的旋转,需严格遵循右手定则:大拇指指向坐标轴正方向,四指弯曲方向即为正向旋转。重点包括:ROS坐标系定义(X+前、Y+左、Z+上)、RPY旋转顺序(先Roll→Pitch→Yaw)及各轴正向旋转效果(如Roll>0时左侧抬高、右侧下沉)。文中纠正了常见错误认知,强调必须基于机体自身坐标系按固定顺序叠加旋转,而非凭视觉直觉判断。

2026-06-16 10:24:00 453

原创 科普:iwr -useb https://openclaw.ai/install.ps1 | iex命令行所涉及的知识点

本文解析了PowerShell一键安装命令iwr -useb https://openclaw.ai/install.ps1 | iex的技术细节。该命令通过Invoke-WebRequest下载远程脚本并直接通过Invoke-Expression执行,存在安全风险。文章详细拆解了命令结构,包括参数类型(单横线短参数/双横线长参数)、常见PowerShell别名(如iwr=Invoke-WebRequest),并特别说明-v参数在不同上下文中的多重含义(版本/挂载/详细输出)。最后强调直接执行远程脚本的危险

2026-05-25 23:26:38 784

原创 科普:定位train.loc[ 行条件 , 列名 ],如:train.loc[train[‘target‘] < -30, ‘outliers‘] = 1

本文介绍了pandas中loc方法在二维表数据定位中的核心用法。通过5个典型场景演示了loc的核心功能:1)单条件单列修改(如标记不及格学生);2)多条件多列操作(如优秀学生加分);3)结合isin()筛选特定行;4)多条件复合筛选与赋值;5)多列同时赋不同值。关键要点包括:条件必须加括号、使用&|逻辑符、多列需用列表包裹。loc方法支持精确的"矩形区域"操作,是DataFrame数据筛选和修改的最高效工具之一,特别适用于条件筛选+批量赋值的业务场景。

2026-04-22 23:06:28 416

原创 科普:大家都说:“模型只认 numpy,不认 DataFrame”

现代sklearn模型(如随机森林)既支持numpy数组,也兼容pandas DataFrame/Series输入,因此"模型只认numpy"的说法不准确。这种误解源于早期sklearn版本仅支持numpy的历史背景,加之传统教程和老代码的延续影响。虽然传入DataFrame不会报错,但需注意模型内部计算时仍会将其转换为numpy数组。该说法本质是开发者为统一操作流程形成的经验性简化表达。

2026-04-17 21:45:15 235

原创 科普:CountVectorizer、TF、TF-IDF,三者层层递进

本文介绍了CountVectorizer、TF(词频)和TF-IDF三者在处理多值离散字段时的递进关系及应用。通过商户交易场景示例,说明CountVectorizer如何将文本转换为词频矩阵,TF作为基础特征反映行为频次,而TF-IDF则通过引入逆文档频率(IDF)强化独特行为、弱化普遍行为。文章用Python代码演示了TF-IDF的实现,展示了如何自动识别用户偏好并生成区分度强的特征。这三种方法层层递进,为处理非结构化数据提供了有效的特征工程方案,特别适用于商户类型、城市等多值离散字段的分析。

2026-04-16 23:08:07 507

原创 科普:python的pandas包中的DataFrame就是二维表

这篇文章深入解析了pandas DataFrame的核心概念和操作方式。DataFrame本质上是一个带表头和行号的二维表,由索引(index)、列名(columns)和数值(values)三部分组成。文章详细介绍了DataFrame的六大基本属性:index(行索引)、columns(列名)、values(数据)、shape(行列数)、size(单元格总数)和dtypes(数据类型)。

2026-04-15 21:58:06 298

原创 科普:pandas 中的类 SQL语句:transaction.groupby(“card_id“)[‘purchase_day‘].diff()

本文介绍了Python中pandas的groupby().diff()操作与SQL窗口函数的等价关系。该操作按用户分组计算交易日期差值,等价于SQL的LAG() OVER(PARTITION BY ORDER BY)窗口函数。文章对比了GROUP BY(聚合)与窗口函数(保留原行数)的区别,并列举了pandas中groupby()与其他聚合函数(如sum、mean、count等)对应的SQL语法。最后强调这些功能都属于pandas库,使用前需导入。全文通过具体示例展示了Python数据分析与SQL查询的语法

2026-04-14 23:26:38 417

原创 科普:pd.DataFrame(features).T.reset_index()中的矩阵转置“.T”(注意:不是“.T()”)

该代码pd.DataFrame(features).T.reset_index()中.T的作用是将字典格式的特征数据转换为机器学习标准表格格式。原始嵌套字典会被pandas解析为"特征×用户"的倒置结构,通过转置操作.T将其转换为"用户×特征"的正确形式,再通过reset_index()将用户ID转为普通列。最终得到每行一个用户、每列一个特征的标准数据表,可直接用于机器学习建模。这种转换是因为pandas处理字典时默认将外层键作为列,而实际需要的是行方向排列的用户数据

2026-04-13 22:26:58 254

原创 科普:Manim 的显示范围问题

本文介绍了Manim动画库中显示范围设置的关键要点。主要内容包括:1) 正确配置16:9比例的全局分辨率(1920×1080像素对应14.22×8坐标系单位);2) 运行时动态修改视野的方法;3) 处理内容出界问题的解决方案;4) 物体缩放操作的两种方式(瞬间缩放和平滑动画缩放)。重点强调了保持16:9比例的重要性,否则会导致画面变形。文章还提供了完整的示例模板,展示如何在实际代码中应用这些配置和操作。

2026-04-12 21:38:02 211

原创 科普: C/C++ 和 Python 里的 `*` 和 `**`,别混淆!

摘要:C/C++中的*表示指针/取值,**表示二级指针;而Python中的*和**与指针无关,分别用于打包/解包参数。*处理列表/元组/位置参数,**处理字典/关键字参数。两者功能逻辑相似但对象不同,容易混淆的点在于Python的*和**写法与C/C++指针语法相似但含义完全不同。典型混淆场景包括将*变量误认为指针取值、函数定义中的*args像指针写法,以及**被误认为二级指针。

2026-04-12 11:49:51 184

原创 科普:%%matplotlib inline:魔法命令 (Cell Magic)

Jupyter笔记本中的%%是单元格魔法命令的标识符,用于改变整个单元格的运行方式。与注释不同,%%开头的指令会被Jupyter识别并执行特殊操作。单元格魔法是Jupyter特有功能,仅在.ipynb环境中有效,普通Python文件不支持。Jupyter还提供单行魔法命令(%开头),两者共同构成了Jupyter强大的交互功能。

2026-04-08 10:35:24 430

原创 科普:python中你写的模块找不到了——`ModuleNotFoundError`

Python模块导入报错ModuleNotFoundError的解决方案:1) 理解工作目录和__file__的区别,工作目录取决于运行命令的位置;2) 使用os.path.dirname(__file__)获取当前文件绝对路径;3) 通过sys.path.append()将项目根目录添加到Python模块搜索路径。最安全的写法是组合使用这些方法:sys.path.append(os.path.join(os.path.dirname(__file__),"../.."))。此外,也可设

2026-04-07 15:50:24 339

原创 科普:Python / Numpy / PyTorch 的数据拼接方法

本文总结了NumPy、Python列表和PyTorch中三种主要的数组拼接方法:横向拼接(列增加)、纵向拼接(行增加)和维度拼接(新增维度)。NumPy提供hstack、vstack和concatenate函数,PyTorch使用cat和stack函数实现类似功能,而Python列表仅支持简单拼接。关键区别在于拼接维度的控制:NumPy使用axis参数,PyTorch使用dim参数。横向拼接增加特征维度,纵向拼接增加样本数量,stack操作会新增一个维度。文中提供了代码示例和对照表。

2026-04-03 21:39:10 323

原创 科普:python中的有趣现象:方法链式调用以及交换次序,`return self`的妙用

本文探讨了Python中链式调用的原理及其在Manim库中的应用。通过示例说明,类似DecimalNumber().set_color(WHITE).scale(5)的链式调用可以无限连接,且非几何变换类方法(如颜色设置与缩放)的顺序可以任意交换。只有当涉及位置、旋转等几何变换时,调用顺序才会影响结果。文章还分析了链式调用的底层机制:方法执行后返回对象自身(return self),使得连续调用成为可能。最后通过绘制折线的实例,展示了链式调用的实际应用场景。

2026-04-03 15:32:52 77

原创 科普:<generator object ...>,不是报错!兼谈`enumerate` 的作用

本文介绍了Python生成器(Generator)的概念及其应用场景。通过sklearn的KFold.split()方法为例,说明生成器对象(<generator object...>)并非错误,而是一种节省内存的特殊对象。生成器主要通过三种方式产生:使用yield的函数、生成器表达式以及某些库的返回值。取值方法包括for循环(推荐)、next()函数和强制转换(如list())。文章重点解释了k折交叉验证为何返回生成器,并比较了列表推导式与生成器表达式的区别。

2026-04-02 21:30:58 374

原创 科普:list (列表),np.array (数组(多维)),torch.Tensor (张量),及其shape与reshape

本文对比了Python列表(list)、NumPy数组(np.array)和张量(Tensor)三种数据结构。普通列表只是容器,没有shape属性且不能reshape;NumPy数组是数值型多维数组,支持shape查询和reshape操作,适用于传统机器学习;张量则在NumPy数组基础上增加了GPU加速和自动求导功能,专为深度学习设计。三者维度结构相同但功能逐级增强,其中reshape操作遵循"元素总数不变"原则,-1表示自动计算维度。NumPy数组和张量都支持灵活的reshape操作,

2026-04-01 22:31:30 411

原创 科普:从交叉验证法的Out-of-Fold Prediction,到集成学习的Stacking

让基模型“负责学习原始数据”,让元模型“负责学习如何融合基模型的知识”,层层递进,实现“1+1>2”的集成效果。

2026-03-29 21:28:13 719

原创 科普:神经网络里的 `model.compile()` 是干什么?

神经网络中的model.compile()并非传统意义上的代码编译,而是为模型配置学习规则,包括优化器、损失函数和评估指标。这一设计源于TensorFlow早期的计算图模式,需要预先定义学习策略。与决策树等传统机器学习模型不同,神经网络必须通过compile明确学习方式后才能训练。所有基于Keras/TensorFlow/PyTorch的深度学习模型(MLP/CNN/RNN等)都需要compile,而XGBoost、SVM等传统模型则无需此步骤,因其训练逻辑已固定。compile的本质是为神经网络设定学习机

2026-03-28 08:28:56 231

原创 科普:神经网络输入层shape与训练集x_train的shape

程序中create_mlp(x_train.shape[0]) 错误地将样本数量当成了输入特征维度,这是个常见的错误,应改为 create_mlp(x_train.shape[1])。x_train.shape[0] 返回样本数(行数),x_train.shape[1] 才是每个样本的特征数(列数)。神经网络的输入层形状必须匹配特征数,否则模型构建或训练时会报错。

2026-03-26 22:31:05 329

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除