Вы можете добавить белый шум к данным. Он работает лучше в сочетании с другими показанными методами, но также может использоваться сам по себе, если вам не нужно иметь много структуры в вашем шуме:
x = np.linspace(0, x_max, n_points)
y = np.linspace(0, y_max, n_points) + np.random.normal(size=n_points)
Если вы хотите, чтобы конечные точки быть исправленным, вы должны держать их постоянными:
y = np.linspace(0, y_max, n_points)
y[1:-1] += np.random.normal(size=n_points - 2)
Я не знаком с regexes, поэтому простите мне если этот неосновной ответ. Я предполагал, что 3$, 2$ и 1$ являются строками. Вот то, что я сделал в IRB для тиражирования проблемы:
irb(main):003:0> Integer("04")
=> 4
irb(main):004:0> Integer("09")
ArgumentError: invalid value for Integer: "09"
from (irb):4:in `Integer'
from (irb):4
from :0
Но похоже, что .to_i не имеет тех же проблем:
irb(main):005:0> "04".to_i
=> 4
irb(main):006:0> "09".to_i
=> 9
Возможно, (0([\d])|([1-9][\d]))
вместо ([\d]{2})
Вам, вероятно, придется использовать 2$, 4$ и 5$ вместо 1$, 2$, 3$.
Или если Ваш regexp поддерживает (?:...)
затем используйте (?:0([\d])|([1-9][\d]))
Так как рубин берет свой regexp от жемчуга, эта последняя версия должна работать.