微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

高效地找到最接近的点,以便在网格数据上跟踪时空

如何解决高效地找到最接近的点,以便在网格数据上跟踪时空

摘要/简化版本

给出由三个1维数组(latslonsdtime都具有相同长度)和网格3维数组{{1} }(由二维rrlat_radar坐标数组和一维时间数组lon_radar定义)我想提取time_radar中所有坐标的网格值(包括纬度,经度和时间)最接近三个一维数组。

我设法使用rr来选择空间中的点,但是我不知道如何将空间和时间的解决方案归纳在一起。现在,我必须分别按时进行选择,这会使代码非常庞大且难以阅读。

有关此问题的更多详细信息,请参见下文


扩展版本

我正在尝试开发一个应用程序,该应用程序使用从天气雷达复合材料获得的降水数据来预测沿轨道的降水。大多数应用程序通常在不考虑时间点移动的情况下预测某一点的降水量。

这个想法是,给定识别空间和时间轨迹的点,从雷达数据中找到最接近的网格点,以获得该轨迹上的降水量估计值(请参见图)。最终目标将是改变开始时间,以找出避免下雨的最佳离开时间。

我刚刚优化了我以前的算法,即使用纯循环,以使用cKDTree中的cKDTree。执行时间从30s减少到380ms :)。但是我认为代码仍然可以优化。这是我的尝试。

作为输入

  • scipylons:轨道的坐标为N维数组
  • latsdtime包含轨道上经过时间的T维数组
  • timedeltalon_radar:包含雷达数据坐标的M x P矩阵
  • lat_radardtime_radar包含雷达预报的Q维数组
  • timedelta:包含每个时间步长的雷达预报的M x P X Q阵列

首先使用rr找到最接近轨迹的网格点:

cKDTree

然后在轨道中找到最接近的点对其进行子集化。如果雷达每公里只有一个栅格点,那么拥有10 m的航迹分辨率是没有意义的。

combined_x_y_arrays = np.dstack([lon_radar.ravel(),lat_radar.ravel()])[0]
points_list = list(np.vstack([lons,lats]).T)

def do_kdtree(combined_x_y_arrays,points):
    mytree = cKDTree(combined_x_y_arrays)
    dist,indexes = mytree.query(points)
    return indexes

results = do_kdtree(combined_x_y_arrays,points_list)
# As we have many duplicates,since the itinerary has a much higher resolution than the radar,# we only select the unique points 
inds_itinerary = np.unique(results)
lon_lat_itinerary = combined_x_y_arrays[inds_itinerary]

现在我们可以使用这些位置获取轨迹上的经过时间以及雷达数据中的相对时间步长

combined_x_y_arrays = np.vstack([lons,lats]).T
points_list = list(lon_lat_itinerary)

results = do_kdtree(combined_x_y_arrays,points_list)

现在,我们拥有找到降水所需的一切,因此我们只需要最后一个循环。我还在dtime_itinerary = dtime[results] # find indices of these dtimes in radar dtime inds_dtime_radar = np.abs(np.subtract.outer(dtime_radar,dtime_itinerary)).argmin(0) 上循环以获取具有不同开始时间的预测。

shifts

特别是,我想找到一种将时间搜​​索与经纬度搜索相结合的方法来寻找最接近的点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?