Как разработать цикл для сканирования массива последовательных значений - PullRequest
0 голосов
/ 05 июня 2019

Я разрабатываю алгоритм, который сканирует поле широты / долготы в поисках определенных фигур с использованием Python.Эти формы создаются с учетом конкретных атмосферных условий.Чтобы массив точек широты прошел тестирование алгоритма, мне требуется, чтобы разница между одной точкой широты и точкой исходящей широты была меньше 1 градуса (требование непрерывности), а разница между минимальным значением и максимальным значением была больше 20градусы (длина требования).Код, приведенный ниже, уже делает это.

if not (y_idx[:-1] - y_idx[1:] > 1).any(): 
# checks the difference between successor/predecessor latitudes at the array level (no loop)
      if y_idx.max() - y_idx.min() > 20 

Ошибка, которую я обнаружил, заключается в том, что я сталкиваюсь с массивом, который содержит сегмент значений, который удовлетворяет требованиям как непрерывности, так и длины, но имеет выбросы, которые вызывают весь массивнарушить требование непрерывности и, таким образом, нежелательно провалить тест, как этот массив ниже.У меня вопрос, как мне написать цикл, который продолжается, если есть сегмент, который отвечает моим требованиям (например, от -49,5 / -73,5), игнорируя при этом выбросы (например, от -45 / -46,5)?

Я выделил жирным шрифтом разрыв в массиве

y_idx = [-45. -45.75 <b>-46.5  -49.5</b>  -49.5  -49.5  -50.25 -50.25 -50.25 -50.25 -50.25 -50.25 -50.25 -50.25 -50.25] 

. Я попытался создать новые массивы для каждого пакета последовательных значений, а затем протестировать их на длину, но я не могу понять для этого код Python.

1 Ответ

0 голосов
/ 05 июня 2019

Используя Numpy.diff, рассчитайте разницу по массиву. Затем разбейте массив , где разница меньше -1. Наконец, получите самый длинный массив в производимых массивах:

import numpy as np

y_idx = [-45., -45.75, -46.5, -49.5, -49.5, -49.5, -50.25, -50.25, -50.25, -50.25, -50.25, -50.25, -50.25, -50.25, -50.25]
x_idx = np.random.rand(len(y_idx))  # dummy data

indexes = np.where(np.diff(y_idx) < -1)[0] + 1
y_longest = max(np.split(y_idx, indexes), key=len)
x_longest = max(np.split(x_idx, indexes), key=len)

Результаты:

y_longest = [-49.5  -49.5  -49.5  -50.25 -50.25 -50.25 -50.25 -50.25 -50.25 -50.25 -50.25 -50.25]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...