如何开发循环以扫描数组以获取连续值

时间:2019-06-05 15:45:15

标签: python arrays logic

我正在开发一种算法,该算法使用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 -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] 

我尝试为每一批连续值创建新的数组,然后测试它们的长度,但是我无法为此找到Python代码。

1 个答案:

答案 0 :(得分:0)

使用Numpy.diff,计算沿数组的差。然后,将数组where拆分为小于-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]