Интервальная арифметика в 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()