В настоящее время я интерполирование измерения с помощью кубических сплайнов, как показан на рисунке:Более вещий способ найти кривое пересечение
Идея заключается в том, я хочу найти всю ширину полувысота этой интерполяции , Для этого я использую небольшой фрагмент кода
f = interpolate.interp1d(hhg_data, signal_array, kind='cubic')
idx2 = np.argsort(np.abs(f(hhg_interp)-0.5))
, который возвращает мне отсортированные индексы пересечения с линией y=0.5
. Тем не менее, я хочу решения на левом краю и правый край кривой, а иногда он возвращает мне две точки подряд. Есть ли элегантный питонический способ избежать этого? По крайней мере, намного лучше, чем мое хакерское решение:
idx_sorted = []
counter = 0
counter2 = 0
while(counter <= 1):
if idx2[counter2] != idx2[counter2-1]+1 and idx2[counter2] != idx2[counter2-1]-1:
idx_sorted.append(idx2[counter2])
counter+=1
counter2+=1
Благодарим за ответы!
Не совсем уверен, hhg_interp в основном представляет собой np.array переменной оси x. В этом случае вы можете взять его как hhg_interp = linspace (18.5, 19.5, 10000), чтобы иметь мелкую сетку для построения f против. – Roland
Добавлен код для вычисления индексов левого и правого краев, а также несколько комментариев. Помогает ли это разъяснить? – cobaltfiftysix
А, ок, я вижу. Спасибо, он работает красиво. Возможно, я обдумаю эту идею, чтобы лучше адаптировать ее к моим интересам. – Roland