mat*_*tdm 6 python floating-point numpy clipping
函数类似于numpy.random.uniform()返回两个边界之间的浮点值,包括第一个边界但不包括顶部边界.也就是说,numpy.random.uniform(0,1)可能会产生0但永远不会产生1.
我正在使用这样的数字并使用有时返回范围之外的结果的函数处理它们.我可以使用numpy.clip()将范围之外的值切换回0-1,但不幸的是,该限制包含顶部数字.
如何在python中指定"无限小于1的数字"?
好吧,如果你正在使用numpy,你可以简单地使用numpy.nextafter:
>>> import numpy
>>> numpy.nextafter(1, 0)
0.99999999999999989
Run Code Online (Sandbox Code Playgroud)
请注意(至少对我来说):
>>> import sys
>>> 1-sys.float_info.epsilon
0.9999999999999998
>>> numpy.nextafter(1, 0) - (1-sys.float_info.epsilon)
1.1102230246251565e-16
>>> numpy.nextafter(1, 0) > (1-sys.float_info.epsilon)
True
Run Code Online (Sandbox Code Playgroud)
顺便说一下,对于第二@Robert克恩的点,有时random.uniform 将包括上界为比其他一些输入端(0,1):
>>> import random, numpy
>>> numpy.nextafter(0,1)
4.9406564584124654e-324
>>> random.uniform(0, numpy.nextafter(0,1))
0.0
>>> random.uniform(0, numpy.nextafter(0,1))
0.0
>>> random.uniform(0, numpy.nextafter(0,1))
4.9406564584124654e-324
Run Code Online (Sandbox Code Playgroud)
[我有一般认为,可能有更好的方法来解决这个问题.]
| 归档时间: |
|
| 查看次数: |
3374 次 |
| 最近记录: |