Step detection in one-dimensional data
convolve with a step, see if peak resolution is good enough
import numpy as npfrom matplotlib import pyplot as pltd = '''594. 568.55555556 577.22222222 624.55555556 546.66666667552.88888889 575.55555556 592.33333333 528.88888889 576.11111111625. 574.22222222 556.33333333 567.66666667 576.66666667591.66666667 566.33333333 567.33333333 547.44444444 631.11111111555.66666667 548.66666667 579.44444444 546.88888889 597.55555556519.88888889 582.33333333 618.88888889 574.55555556 547.44444444593.11111111 565.66666667 544.66666667 562.66666667 554.11111111543.88888889 602.33333333 609.77777778 550.55555556 561.88888889719.33333333 784.44444444 711.22222222 843.66666667 691.33333333690.11111111 684.33333333 749.11111111 759.11111111 653.33333333817.11111111 705.22222222 689.44444444 712.33333333 659.683.88888889 713. 740.44444444 692.22222222 677.33333333681.44444444 640. 717.55555556 717.88888889 769.22222222690.88888889 786. 774.66666667 799.44444444 743.44444444789.88888889 673.66666667 685.66666667 709.88888889 645.55555556846.11111111 792.77777778 702.22222222 749.44444444 678.55555556707.55555556 665.77777778 643.55555556 671.44444444 795.66666667627.22222222 684.55555556 708.44444444 829.66666667 719. '''dary = np.array([*map(float, d.split())])dary -= np.average(dary)step = np.hstack((np.ones(len(dary)), -1*np.ones(len(dary))))dary_step = np.convolve(dary, step, mode='valid')# get the peak of the convolution, its indexstep_indx = np.argmax(dary_step) # yes, cleaner than np.where(dary_step == dary_step.max())[0][0]# plotsplt.plot(dary)plt.plot(dary_step/10)plt.plot((step_indx, step_indx), (dary_step[step_indx]/10, 0), 'r')