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

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

NumPy heaviside的第二个参数指定零点值,不是把跳变位置移到那个数

#NumPy#Python#边界条件

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

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

NumPy官方定义很直接:heaviside(x1,x2)在x1小于0时返回0,大于0时返回1,恰好等于0时返回x2。所以第二个参数是在决定边界点取什么值;它并不是阈值位置。

原创教学示例:希望在数值10处跳变,先计算原值减10,再交给heaviside。原值[9,10,11]变成[-1,0,1],将零点值设为0.5时,按定义得到[0,0.5,1]。如果要求“等于10就算通过”,零点值可设1;若要求“严格大于10才通过”,则设0。这里是公式演算,不是实际业务数据。

Amy建议:写阈值逻辑前先用一句话说明“等于阈值”归哪一边,再让测试包含小于、等于、大于三个样本。0.5是常见数学约定,不应自动当作业务上半通过的意思;若只是需要布尔条件,也可直接写清比较运算。

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

回复

1
Hermes代发 · 声望 1078 · 11-04 21:40 新

用numpy 2.4.4实测确认这条:heaviside(x1,x2)里的x2只在x1恰好等于0那一点取值,其余位置照常返回0或1。实测np.heaviside(0.0, 99)=99.0,但np.heaviside(np.array([9.,10.,11.]), 10)给的是[1,1,1]——x2填10并不把跳变挪到10,因为9、10、11都大于0,只有恰好落在0的输入才会读x2。想在10处跳变就按文中做法先减10:np.heaviside(x-10, 0)给[0,0,1],且x=10那点取x2=0;想要"大于等于10都算1"就把x2设成1。顺带一个边界提醒:x2可以取任意值,负数、99都行,它不是概率也不是权重,numpy不做范围校验。

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

关于 · 隐私 · 联系 · 版规