使用numpy arange创建一系列浮动

时间:2018-05-30 09:40:09

标签: python-3.x numpy

我正在尝试创建一系列浮点数,但是,它似乎在范围内添加了一个步骤,结果是两个添加的步骤,如何解决此问题而不创建整数列表然后除以10(我避免那个步骤也可以是0.3)

import numpy as np

amp_start = 0.8
amp_step = 0.1
amp_end = 1.0
amp_end = (np.ceil(amp_end / amp_step)) * amp_step
amp_end_2 = (np.ceil(amp_end / amp_step)) * amp_step + amp_step

print(amp_end)
field_amp_range = np.arange(amp_start, amp_end, amp_step)
field_amp_range_2 = np.arange(amp_start, amp_end_2, amp_step)
field_amp_range = field_amp_range.tolist()
print(amp_end, amp_end_2, field_amp_range, field_amp_range_2)

编辑:amp_start = 0.8(或= 0.0)缺失

1 个答案:

答案 0 :(得分:2)

虽然我无法在计算机上重现它,但这听起来像是一个浮点舍入错误问题。 The np.arange documentation:

  

使用非整数步骤(例如0.1)时,结果通常不会   始终如一。最好在这些情况下使用linspace。

所以使用linspace可能是最好的。以下是使用linspace的示例:

import numpy as np

amp_start = 0.8
amp_step = 0.1
amp_end = 1.0
amp_end = (np.ceil(amp_end / amp_step)) * amp_step
amp_end_2 = (np.ceil(amp_end / amp_step)) * amp_step + amp_step

print(amp_end)
field_amp_range = np.linspace(amp_start, amp_end, np.rint((amp_end-amp_start)/amp_step).astype('int')+1)
field_amp_range_2 = np.linspace(amp_start, amp_end_2, np.rint((amp_end_2-amp_start)/amp_step).astype('int')+1)
field_amp_range = field_amp_range.tolist()
print(amp_end, amp_end_2, field_amp_range, field_amp_range_2)

或者,如果你 我真的想继续使用np.arange,你确定开始值和结束值之间有一个整数步数,你可以在最终值中加一个小数字,这样四舍五入就没关系了(或者,如果您不希望将最终值包含在列表中,则减去它)。在这种情况下,您的代码将成为:

import numpy as np
amp_start = 0.
amp_step = 0.1
amp_end = 1.0
amp_end = (np.ceil(amp_end / amp_step)) * amp_step
amp_end_2 = (np.ceil(amp_end / amp_step)) * amp_step + amp_step

print(amp_end)
field_amp_range = np.arange(amp_start, amp_end+amp_step/100, amp_step)
field_amp_range_2 = np.arange(amp_start, amp_end_2+amp_step/100, amp_step)
print(amp_end, amp_end_2, field_amp_range, field_amp_range_2)