#python #arrays #python-3.x
Вопрос:
Я работаю с некоторыми данными об ориентации разломов в осадочном хребте. Я измерил направление по компасу, в которое погружаются обломки, и поместил данные в массивы numpy. Проблема в том, что массивы теперь линейны. Как я могу сказать Python, что, когда я выполняю статистический анализ, 357 и 3 имеют одинаковое расстояние до 360? Можно ли создать круговой массив?
Комментарии:
1. Тебе это может пригодиться
min((a1-a2)60, (a1-a2)60)
. Это даст наименьшее количество градусов по кругу, по часовой стрелке или против часовой стрелки. Другой вариант-преобразовать углы в точки на единичной окружности(cos(a1), sin(a1))
, а(cos(a2), sin(a2))
затем найти евклидово расстояние между этими точками.
Ответ №1:
Трудно сказать, как помочь вам без MWE, но я могу указать, что по модулю (%) обычно обрабатываются циклические величины.
1-360 # -359
360-359 # 1
(1-360) % 360 # 1
(360-359) % 360 # 1
359-360 # -1
360-1 # 359
(359-360) % 360 # 359
(360-1) % 360 # 359
Если направление не имеет значения, вы можете найти минимальную угловую разницу с помощью:
def diff(a, b, turn=360): return min( ((a-b) % turn) , ((b-a) % turn) )