Отмечать точки перегиба вдоль линии профиля

#python #python-3.x #arcpy

#python #python-3.x #дугообразная

Вопрос:

У меня есть шейп-файл осевой линии 3D-потока, и я пытаюсь отметить точки перегиба вдоль профиля с помощью ArcGIS Pro с Python 3, в частности, там, где высота изменяется на 0,5 фута или более. Вот несколько примеров точек перегиба, о которых я говорю:

введите описание изображения здесь

У меня есть таблица с вершинами и высотой для каждой из них. Я добавил поле с именем «Флаг» для хранения того, какие вершины являются точками перегиба.

введите описание изображения здесь

Как я могу отмечать точки, в которых высота поднимается или опускается на 0,5 фута?

Комментарии:

1.Вы хотите увеличить высоту на 0,5 фута в дополнение к обычному значению точки перегиба ( f''(x) = 0 ) или просто увеличить на 0,5?

2. Хороший момент. Я хотел бы включить обычное значение точки перегиба.

Ответ №1:

Я не уверен, как ваши данные в настоящее время представлены в вашей программе. Если вы можете преобразовать его в массив numpy, diff() вычисляет дискретную разницу между элементами

Преобразование в массивы numpy, если у вас есть значения в списке, так же просто, как

 my_numpy_array = np.array(my_list)
  

Допустим, у вас есть значения по оси y в массиве y и значения по оси x в массиве x .

Мы можем найти f'(x) по

 f1 = diff(y)/diff(x)
  

и f''(x) по

 f2 = diff(f1) / diff(x)
  

Дополните длину этих массивов nan так, чтобы они были такой же длины, как x .

 f1_p = np.pad(f1, (0, x.shape[0]), mode='constant', constant_values=(np.nan))
f2_p = np.pad(f2, (0, x.shape[0]), mode='constant', constant_values=(np.nan))
  

Затем вы можете использовать numpy logical_and для проверки f2_p == 0 и f1_p > 0.5

 flag = np.logical_and(f2_p == 0, f1_p > 0.5)