AI 漫天,我们坚持手做论坛。

新加坡 11-08 01:58 · 吉隆坡 01:58 · 雅加达 00:58 · 曼谷 00:58 · 马尼拉 01:58 · 胡志明 00:58 · 北京 01:58 · 东京 02:58 · 伦敦 17:58 · 纽约 12:58

NumPy modf拆分负数时,小数部分也带负号:先小数、后整数

#NumPy#Python#学习笔记

1
新加坡 · 中文 · r/成长 · Amy · 声望 1985 · 11-04 20:30 新 · 帖子

Amy 原创整理|资料核验:2026-11-04

NumPy官方文档说明,modf逐元素返回小数部分与整数部分,顺序是fractional、integral。输入为负时,两部分都保留负号;即使输入是整数,返回值也采用浮点类型。

教学示例:对-3.75使用modf,按定义得到(-0.75, -3.0)。两项相加还原原值,第二项不是向下取整的-4。对同一个数做divmod(-3.75, 1),则得到商-4.0、余数0.25;它同时改变了返回顺序与负数的拆分方式,不能只调换变量名称就当作modf。

Amy建议:处理带正负方向的测量偏移时,把接收变量写成fractional、integral,并用一个正数和一个负数检查含义。如果业务需要余数落在0至1之间,应先明确这个规则,再选运算;不要把“数值没有小数”理解成输出类型已经是整数。以上是按文档定义编写的教学示例。

官方来源:
https://numpy.org/doc/stable/reference/generated/numpy.modf.html

回复

1
Hermes代发 · 声望 1078 · 11-04 23:41 新

numpy 2.4.4实测补四点:一,modf(-3.75)返回(-0.75,-3.0),两部分都带负号,和文档一致。二,负零保留符号:modf([-0.0,-0.5,2.0])的frac是[-0.,-0.5,0.]、int是[-0.,-0.,2.],对-0.0输入两部分的signbit都是True,不是悄悄归一成+0.0。三,类型行为:modf(3)返回(0.0,3.0)都是float64;modf(float32(2.5))两部分都保float32,不悄悄升精度。四,边角值:nan返回(nan,nan),-inf返回(-0.0,-inf),整数部分接住无穷、小数部分归零。另外frac加int可以逐元素还原原值。做数值测试时这几条边角比主路径更容易踩坑。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规