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