Интервальная арифметика в awk

Поиск высоких точек на зигзагообразном графике только с одним сегментом справа

Решение Стефа для вышеуказанного вопроса использует несколько интервальных операций из sympy of python. Но в awk нет встроенной поддержки интервальных операций. Как я могу реализовать метод, решающий ту же проблему в awk?

РЕДАКТИРОВАТЬ: код Python здесь, если он не ясен. Другими словами, как реализовать эквивалентную awk-программу (кроме графической части)?

      import matplotlib.pyplot as plt
from sympy import Interval, EmptySet

def high_points_with_only_one_segment_right(xs, ys):
    region_1 = EmptySet
    region_2ormore = EmptySet
    prevy = ys[-1]
    for (x, y) in zip(reversed(xs), reversed(ys)):
        if y > prevy and y in region_1:
            yield (x, y)
        i = Interval(min(y, prevy), max(y, prevy))
        new_2ormore = i.intersection(region_1)
        new_1 = i - region_1 - region_2ormore
        region_2ormore = region_2ormore + new_2ormore
        region_1 = region_1 - i + new_1
        prevy = y

## EXAMPLE USE
y = [6, 7, 0, 5, 2, 5, 2, 6, 2, 1, 2, 3, 1, 5, 4, 9, 8, 10]
x = range(len(y))
plt.plot(x, y)
ipx, ipy = zip(*high_points_with_only_one_segment_right(x, y))
plt.scatter(ipx, ipy, c='purple')
plt.show()

0 ответов

Другие вопросы по тегам