#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)