astropy 建模模块 `verify_dims_in_fitting` 详解:关闭拟合形状校验,支持重采样类模型拟合
科学计算科研数据分析【免费下载链接】astropyAstronomy and astrophysics core library项目地址https://gitcode.com/gh_mirrors/as/astropy点击查看免费下载导读astropy 的建模与拟合模块astropy.modeling在拟合前默认会校验输入坐标数组与待拟合数据数组的形状是否一致形状不匹配会直接抛出ValueError。自 20369 号变更起Model类新增了verify_dims_in_fitting类属性默认True允许模型显式退出该校验从而拟合那些合法地返回与输入不同形状输出的模型——例如用仪器响应函数做卷积、把结果重采样到更粗网格的模型。读完本文你将掌握该属性的默认行为、在普通模型与复合模型上的正确设置方式、底层实现原理_verify_dims_in_fitting与_convert_input的调用链以及一个可直接复制的完整拟合示例。背景拟合前的形状校验及其局限在 astropy 中无论使用线性拟合器还是非线性拟合器拟合前都会先对输入数据做一次维度一致性检查输入坐标x二维模型还有y与数据y/z必须具有相同的形状shape。这一约束源于最小二乘等拟合算法对输入输出的结构性假设——坐标与数据理应一一对应。这一默认校验由 astropy/modeling/fitting.py 中的_convert_input(x, y, z, *, verify_dimsTrue)实现。当verify_dimsTrue时代码会执行如下检查见 fitting.pyif z is None: if verify_dims and data_shape ! x.shape: raise ValueError(x and y should have the same shape) farg (x, y) else: if verify_dims and not (x.shape y.shape data_shape): raise ValueError(x, y and z should have the same shape) farg (x, y, z)也就是说1D 拟合在x与y形状不一致时抛出x and y should have the same shape2D 拟合在x、y、z三者形状不一致时抛出x, y and z should have the same shape。但有些模型会合法地改变数据形状比如一个先与仪器响应函数做卷积、再输出到更粗网格上的模型其输出长度与输入坐标长度天然不同。这类模型过去无法直接参与拟合必须绕过形状检查。verify_dims_in_fitting正是为这类场景提供的显式退出通道。新属性Model.verify_dims_in_fitting变更记录 docs/changes/modeling/20369.api.rst 指出Modelnow has averify_dims_in_fittingattribute, defaulting toTrue. Setting it toFalseon a model, or on any component of a compound model, skips the check that the input coordinates and the data have the same shape when fitting.该属性在 astropy/modeling/core.py 的Model类中作为类属性定义# This class attribute allows users to skip the dimension check which ensures # that input coordinates are the same dimensions as the data. It is set as True # by default ensuring that the default setting is to perform the dimension check. verify_dims_in_fitting True关键语义默认值为True即默认行为与历史版本完全一致——所有拟合器仍然执行形状校验存量代码不受影响值取False时模型自身的形状校验被跳过拟合器会带着形状不同的x/y继续运行它是类属性推荐在自定义模型类体class body中声明例如verify_dims_in_fitting False所有实例自动继承。配套的功能变更记录 docs/changes/modeling/20369.feature.rst 补充说明了设计意图该能力允许拟合返回数组形状与输入不同的模型典型如与仪器响应卷积后在更粗网格上返回结果的模型同时特别强调——对复合模型compound model该属性必须设置在某个组件模型上而不是设置在复合模型本身。底层实现_verify_dims_in_fitting如何解析退出标志verify_dims_in_fitting并不会被直接读取拟合器统一通过辅助函数_verify_dims_in_fitting(model)解析定义于 astropy/modeling/fitting.pydef _verify_dims_in_fitting(model): Resolve the verify_dims_in_fitting opt-out flag for model. if model is None: return True if hasattr(model, traverse_postorder): # i.e. a CompoundModel nodes model.traverse_postorder() else: nodes [model] return not any( getattr(node, verify_dims_in_fitting, True) is False for node in nodes )这段实现包含了三个重要设计决策普通模型直接把模型本身放进节点列表读其verify_dims_in_fitting复合模型通过traverse_postorder()见 astropy/modeling/core.py后序遍历整棵复合模型树检查每一个叶子组件任一叶子退出即整体退出只要复合模型中任何一个组件设置了False整个复合模型的形状校验就被关闭——这正是属性必须设置在组件上的底层原因也对应测试test_verify_dims_in_fitting_leaf_winsAn opt-out on any leaf disables the check for the whole compound model验证的行为。拟合器中的调用点解析结果通过verify_dims_verify_dims_in_fitting(model_copy)传入_convert_input覆盖线性拟合与非线性拟合两条路径线性最小二乘类拟合器LinearLSQFitter等在 fitting.py 调用非线性拟合器TRFLSQFitter、LMLSQFitter、LevMarLSQFitter等在 fitting.py 以及 L1837、L1928 等多处调用。无论哪种拟合器只要模型设置了verify_dims_in_fitting False_convert_input就会跳过形状断言直接把坐标与数据送入后续参数求解流程。实战示例拟合重采样到粗网格的模型官方用户指南 docs/modeling/fitting.rst 的 Fitting models that change the shape of the data 一节给出了完整的可运行示例。核心是自定义一个可拟合的 1D 模型它在evaluate内部把结果重采样为 7 个点import numpy as np from astropy.modeling import Fittable1DModel, Parameter class RebinnedLinear1D(Fittable1DModel): verify_dims_in_fitting False intercept Parameter(default0.) slope Parameter(default1.) staticmethod def evaluate(x, intercept, slope): y intercept slope * x return np.interp(np.linspace(x.min(), x.max(), 7), x, y)生成数据在 200 点网格上求值模型把结果重采样到 7 个点坐标与数据形状显式不同x np.linspace(0., 10., 200) y RebinnedLinear1D(intercept3., slope2.)(x) x.shape, y.shape # ((200,), (7,))如果RebinnedLinear1D没有设置verify_dims_in_fitting False这组(200,)坐标与(7,)数据会让拟合直接抛出ValueError设置之后拟合可以正常完成并恢复出原始参数from astropy.modeling.fitting import TRFLSQFitter fit TRFLSQFitter() m fit(RebinnedLinear1D(), x, y) m.parameters # array([3., 2.])注该示例使用TRFLSQFitter需要环境已安装 SciPy。测试代码中同类模型还通过参数化覆盖了non_linear_fitters fitters的全部拟合器见下文测试章节。复合模型在组件上设置对复合模型如|串联、*并联的组合不要试图在复合模型对象上设置该属性而应直接设置到其中一个叶子组件上from astropy.modeling import models class OptOutGaussian1D(models.Gaussian1D): verify_dims_in_fitting False # 复合模型中任一组件退出即可关闭整体校验 compound OptOutGaussian1D(1.0, 5.0, 0.1) * models.Const1D(1.0)在 astropy/modeling/tests/test_fitters.py 的test_verify_dims_in_fitting_leaf_wins中对此有直接验证models.Linear1D() | models.Shift()无退出标志返回校验开启而RebinnedLinear1D() | models.Shift()含退出组件返回校验关闭。带单位数据的场景astropy 模型还支持带单位的输入。拟合时CompoundModel.without_units_for_data会重建复合模型节点退出标志之所以仍然生效正是因为解析逻辑是从叶子节点上读取的。测试 astropy/modeling/tests/test_quantities_fitting.pytest_verify_dims_in_fitting_survives_unit_stripping专门验证了这一点OptOutGaussian1D(1 * u.Jy, 1 * u.um, 0.1 * u.um) * models.Const1D(1.0)在构造复合模型及执行without_units_for_data剥离单位后_verify_dims_in_fitting均返回False退出标志不会丢失。测试验证默认行为与退出行为的双向保障围绕该特性astropy/modeling/tests/test_fitters.py 提供了成体系的测试可作为理解行为的权威参考测试用例验证内容test_verify_dims_in_fitting_defaultL1608-L1610_verify_dims_in_fitting(None)与普通Linear1D默认均返回True即默认执行校验test_verify_dims_in_fitting_leaf_winsL1613-L1616复合模型中任意叶子退出则整体关闭校验test_convert_input_verify_dims_1dL1619-L16271D 场景形状不一致默认抛x and y should have the same shapeverify_dimsFalse时正常返回test_convert_input_verify_dims_2dL1630-L16392D 场景形状不一致默认抛x, y and z should have the same shapeverify_dimsFalse时正常返回test_fitting_verifies_dims_by_defaultL1642-L1652各拟合器对形状不匹配的数据默认抛ValueErrortest_fitting_with_mismatched_dimsL1655-L1668各拟合器对RebinnedLinear1D退出校验可正常拟合且能恢复intercept3.0、slope2.0的真实参数其中测试用的RebinnedLinear1D定义于 test_fitters.py其evaluate通过np.interp(np.linspace(x.min(), x.max(), 7), x, y)将任意长度的输入重采样为 7 个点正是返回不同形状数组模型的真实写照。适用场景与注意事项适用场景仪器响应卷积后降采样、直方图/分箱类模型输出落在更粗的网格、任何输入输出形状合法不同的可拟合模型风险提示关闭形状校验意味着拟合器不再能保证坐标与数据一一对应优化器与协方差估计的语义由模型自身负责务必在evaluate中正确处理输入输出映射关系设置位置普通模型直接在类体中写verify_dims_in_fitting False复合模型必须在组件叶子上设置且任一组件退出即整体退出默认安全属性默认True未显式设置时所有现有拟合行为保持不变存量代码无需任何改动。参考文件索引变更记录docs/changes/modeling/20369.api.rst、docs/changes/modeling/20369.feature.rst用户指南docs/modeling/fitting.rstFitting models that change the shape of the data 章节属性定义astropy/modeling/core.py解析与校验实现astropy/modeling/fitting.py测试用例astropy/modeling/tests/test_fitters.py、astropy/modeling/tests/test_quantities_fitting.py赞分享科学计算科研数据分析【免费下载链接】astropyAstronomy and astrophysics core library项目地址https://gitcode.com/gh_mirrors/as/astropy点击查看免费下载相关推荐Astropy建模与拟合从简单函数到复杂天体模型的终极指南Astropy建模与拟合从简单函数到复杂天体模型的终极指南 Astropy作为天文学和天体物理学领域的核心库其强大的建模与拟合功能让数据分析变得简单高效。无科学计算科研数据分析Jesse MCP 蒙特卡洛模拟工具指南用重采样 K 线验证策略是否过拟合Jesse MCP 蒙特卡洛模拟工具指南用重采样 K 线验证策略是否过拟合 导读 Jesse 是一个用 Python 编写的开源加密货币交易机器人其 MCP金融科技数据分析后端AI 应用理解模型选择、欠拟合与过拟合D2L项目中的关键概念解析理解模型选择、欠拟合与过拟合D2L项目中的关键概念解析 引言机器学习中的根本挑战 在机器学习实践中我们经常面临一个核心困境如何在训练数据上表现优异的同时人工智能深度学习机器学习教程上一篇Podman 启动健康检查间隔--health-startup-interval完全指南参数语义、底层实现与 Quadlet 配置下一篇使用 Sublime Merge 完成首次开源贡献first-contributions 实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

基于MediaPipe与VL模型的中医舌象重构引擎:从像素到诊断的量化计算实践

基于MediaPipe与VL模型的中医舌象重构引擎:从像素到诊断的量化计算实践

1. 项目缘起与整体设计思路1.1 为什么我要做这个舌象重构引擎做中医舌诊数字化这件事,我前前后后折腾了快两年。最开始的想法特别朴素:用手机拍张舌头照片,让程序告诉我这属于什么舌象。但真正动手之后才发现,这件事远比想象中复杂…

2026/10/13 9:13:29 阅读更多 →
Apache OpenDAL 条件式重命名实战:rename_with(...).if_not_exists(true) 与原子发布语义

Apache OpenDAL 条件式重命名实战:rename_with(...).if_not_exists(true) 与原子发布语义

数据存储后端 【免费下载链接】opendal Apache OpenDAL: One Layer, All Storage. 项目地址: https://gitcode.com/gh_mirrors/op/opendal 点击查看 免费下载 本文基于 Apache OpenDAL 的核心 RFC 提案 7818_rename_if_not_exists.md 撰写。OpenDAL 将 rename 定义…

2026/10/13 9:13:29 阅读更多 →
MySQL性能优化实战:从EXPLAIN解读到索引与SQL重写

MySQL性能优化实战:从EXPLAIN解读到索引与SQL重写

1. 这不是“调优秘籍”,而是DBA每天在生产环境里反复验证的生存手册你有没有遇到过这样的场景:一个原本跑得挺稳的报表SQL,某天凌晨突然开始超时,监控里QPS断崖下跌,慢查询日志里同一句SQL的执行时间从80ms飙到3.2秒&a…

2026/10/13 9:13:29 阅读更多 →

最新新闻

PowerContext挂接MiniMax Code:终结跨会话与跨Agent上下文断裂

PowerContext挂接MiniMax Code:终结跨会话与跨Agent上下文断裂

大约两个星期前,我把手头的项目从“上下文完全靠每次手动贴”的方式,切到了 PowerContext 挂接 MiniMax Code 的方式。困扰我很久的一个问题终于不再是问题:跨会话和跨 Agent 之间的项目上下文,不再断裂了。起因很简单。我开一个新…

2026/10/13 10:00:16 阅读更多 →
领域模型进化:GRPO 强化学习与 Post-training Engineering

领域模型进化:GRPO 强化学习与 Post-training Engineering

通用大模型(base model)是个通才。它在万亿 token 上做过 next-token prediction,把世界知识压缩进了权重,但你让它写一段符合你公司合规规范的代码、审一份你领域的合同、跑通你内部系统的 SQL,它大概率会给你一个&qu…

2026/10/13 10:00:16 阅读更多 →
t3code 深度拆解:编码工具核心原理与实操避坑指南

t3code 深度拆解:编码工具核心原理与实操避坑指南

1. 从“t3code”这个标题说起:它到底是什么,能解决什么问题第一次看到“t3code”这个标题,很多人会一头雾水。它不像“Python爬虫实战”那样直白,也不像“家庭咖啡烘焙指南”那样有明确场景。但恰恰是这种模糊性,给了我…

2026/10/13 10:00:16 阅读更多 →
Seldon Core Pipeline 就绪状态检查实战:从 tfsimples 示例到 ready 接口的源码解析

Seldon Core Pipeline 就绪状态检查实战:从 tfsimples 示例到 ready 接口的源码解析

人工智能大模型MLOpsLLMOps模型推理服务云原生后端 【免费下载链接】seldon-core An MLOps framework to package, deploy, monitor and manage thousands of production machine learning models 项目地址: https://gitcode.com/gh_mirrors/se/seldon-core 点击查看…

2026/10/13 10:00:16 阅读更多 →
Oracle到达梦迁移实战:数据类型、SQL语法与存储过程避坑指南

Oracle到达梦迁移实战:数据类型、SQL语法与存储过程避坑指南

1. 迁移之前,先把两边的“家底”摸清楚1.1 为什么Oracle到达梦的迁移总在“意料之外”翻车做过数据库迁移的人都有一个共识:迁移本身不难,难的是迁移之后业务跑不起来。Oracle到达梦的迁移尤其如此,因为这两套数据库虽然都支持SQL…

2026/10/13 10:00:16 阅读更多 →
Java垃圾分类系统:树形分类建模与时间窗调度实战

Java垃圾分类系统:树形分类建模与时间窗调度实战

简介:这是一套已高分通过的Java毕业设计项目源码,面向计算机专业本科生及Java初学者,聚焦城市垃圾分类回收管理场景,提供从用户注册登录、垃圾类型分类录入、回收点信息维护、预约回收申请到后台数据统计的完整业务闭环&#xff0…

2026/10/13 9:59:14 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →