首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numpy.heaviside与机床精度

numpy.heaviside与机床精度
EN

Stack Overflow用户
提问于 2019-05-04 16:53:59
回答 1查看 237关注 0票数 1

我对numpy.heaviside函数有一些问题。本质上,当我似乎将相同的值传递给函数时,它给出了不同的结果。

根据它给出的文件

代码语言:javascript
复制
                      0   if x1 < 0
heaviside(x1, x2) =  x2   if x1 == 0
                      1   if x1 > 0

我认为问题在于x1==0的比较。原则上有两种选择:

  1. 检查该值是否在机器精度范围内为零。
  2. 检查该值是否实际上为零。

我原以为numpy可以做1,但现在我认为它可以做2。

有什么办法可以绕过这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2019-05-04 17:34:48

我自己解决的。问题似乎确实在于numpy.heaviside使用了np.equal-like零检查。下面是一个使用np.isclose的函数。

代码语言:javascript
复制
import numpy as np
def heaviside_close(x1, x2):
    closeCheck = np.isclose(x1, np.zeros_like(x1))
    heavisideBare = np.heaviside(x1, 0.0)
    zeroVal = np.where(closeCheck, x2, 0.0)-np.where(closeCheck, heavisideBare, np.zeros_like(heavisideBare))
    result = heavisideBare+zeroVal
    return result
print(heaviside_close(np.asarray([-1., -0.1, 1e-20, 0.1, 1.]), 0.5))
# >>> [0.  0.  0.5 1.  1. ]
print(np.heaviside(np.asarray([-1., -0.1, 1e-20, 0.1, 1.]), 0.5))
# >>> [0.  0.  1.  1.  1. ]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55984798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档