【发布时间】:2018-07-23 04:01:23
【问题描述】:
因为numpy.arange() 使用ceil((stop - start)/step) 来确定项目的数量,所以一个小的浮点不精确(stop = .400000001) 可能会在列表中添加一个意想不到的值。
示例
第一种情况不包括停止点(有意)
>>> print(np.arange(.1,.3,.1))
[0.1 0.2]
第二种情况包括停止点(不打算)
>>> print(np.arange(.1,.4,.1))
[0.1 0.2 0.3 0.4]
numpy.linspace() 修复了这个问题,np.linspace(.1,.4-.1,3)。但要求您知道步数。 np.linspace(start,stop-step,np.ceil((stop-step)/step)) 导致同样的不一致。
问题
如何在不知道范围内元素数量的情况下生成可靠的float 范围?
极端情况
考虑我想生成一个未知精度的浮点索引的情况
np.arange(2.00(...)001,2.00(...)021,.00(...)001)
【问题讨论】:
-
你保证 (stop-start) 是 step 的倍数吗?
-
我读过的所有内容似乎都表明唯一可行的方法是从端点
print(np.arange(.1,(.4 - step/1000),step))中减去步长的一部分。我不确定您是否可以避免这种情况,但最终也会失败 -
@user545424 你不保证它是步长的倍数
-
@roganjosh 谢谢,这很有帮助。它类似于通过乘数转换到
int,因为您必须估计满足(1/step_size) < m < 1/precision_error的乘数m -
你从哪里得到这个步长值?你当初为什么会遇到这种情况?您可能最终会猜测公差。
标签: python python-2.7 numpy floating-point