Хотя я не могу воспроизвести его на своем компьютере, это похоже на проблему ошибки округления с плавающей точкой. Документация np.arange:
При использовании нецелого шага, такого как 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)