Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在网格化数据上高效地找到空间和时间上最接近的跟踪点_Python_Latitude Longitude_Nearest Neighbor_Kdtree - Fatal编程技术网

Python 在网格化数据上高效地找到空间和时间上最接近的跟踪点

Python 在网格化数据上高效地找到空间和时间上最接近的跟踪点,python,latitude-longitude,nearest-neighbor,kdtree,Python,Latitude Longitude,Nearest Neighbor,Kdtree,摘要/简化版 给定由三个长度相同的一维阵列lats、lons和dtime定义的轨迹点列表,以及由二维lat_雷达、lon_雷达坐标阵列和一维时间阵列time_雷达定义的网格化三维阵列rr,我想提取rr中的所有网格值,其中坐标纬度,包含的经度和时间最接近三个一维数组 我已经设法使用cKDTree来选择空间中的点,但我不知道如何将解决方案推广到空间和时间。现在,我必须按时分别进行选择,这使得代码非常庞大且难以阅读 有关此问题的更多详细信息,请参阅下文 扩展版本 我正在尝试开发一个应用程序,它使用从天

摘要/简化版

给定由三个长度相同的一维阵列lats、lons和dtime定义的轨迹点列表,以及由二维lat_雷达、lon_雷达坐标阵列和一维时间阵列time_雷达定义的网格化三维阵列rr,我想提取rr中的所有网格值,其中坐标纬度,包含的经度和时间最接近三个一维数组

我已经设法使用cKDTree来选择空间中的点,但我不知道如何将解决方案推广到空间和时间。现在,我必须按时分别进行选择,这使得代码非常庞大且难以阅读

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

扩展版本

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

其思想是,给定在空间和时间上识别轨迹的点,从雷达数据中找到最近的网格点,以获得轨迹上的降水量估计值。最终目标是改变开始时间,以确定最佳离开时间,避免下雨

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

作为我们的投入

lons,lats:作为N维数组的轨迹坐标 dtime:timedelta T维数组,包含轨迹上经过的时间 lon_雷达、lat_雷达:包含雷达数据坐标的M x P矩阵 dtime_雷达:包含雷达预报的时间增量Q维阵列 rr:M x P x Q阵列,包含每个时间步的雷达预报 首先使用cKDTree查找最接近轨迹的网格点:

组合_x_y_阵列=np.dstack[lon_radar.ravel, 拉威尔雷达[0] 点列表=listnp.vstack[lons,lats].T def do_kdtreecombined_x_y_数组,点: mytree=cKDTreecombined_x_y_数组 dist,index=mytree.querypoints 返回索引 结果=do_kdtreecombined_x_y_数组,点列表 由于我们有很多副本,由于行程的分辨率比雷达高得多, 我们只选择唯一的点 inds_行程=np.uniqueresults lon_lat_TINERARY=组合_x_y_数组[inds_TINERARY] 然后找到轨迹中最近的点以将其子集。如果雷达每公里只有网格点,那么轨道分辨率为10米是没有意义的

组合数组=np.vstack[lons,lats].T 积分列表=列表上的行程 结果=do_kdtreecombined_x_y_数组,点列表 现在我们可以使用这些位置来获得轨道上经过的时间和雷达数据中的相对时间步长

dtime\u行程=dtime[结果] 在雷达dtime中查找这些dtime的索引 inds\u dtime\u雷达=np.absnp.subtract.outerdtime\u雷达,dtime\u行程。argmin0 现在我们有了找到降水量所需的一切,所以我们只需要最后一个循环。我还循环移位以获得不同开始时间的预测

班次=1,3,5,7,9 雨=np.空形状=lenshifts,Lends_行程 对于i,轮班制: 温度=[] 对于i_时间,i_空间在zipinds_dtime_雷达,inds_行程: 临时附录[i_时间+移位].ravel[i_空间] 雨[i,:]=温度
特别是,我想找到一种方法,将时间搜索与横向搜索结合起来,寻找最近的点。

您能将您的问题重新表述为更精确、更具体吗?比这更具体吗我发布了一张图片和完整的工作代码片段。。。老实说,我认为现在这个问题已经太长了,细节太多了。我应该详细说明哪些部分?我的意思是,恰恰相反。你的问题太多细节了。你能换个说法问一个具体的问题吗?有道理。我在顶部添加了问题的摘要版本。我没有信心删除详细的部分,所以我现在就把它放在那里:我想我找到了为什么这是如此复杂。因此,我的问题可能与这些有关。你能把你的问题重新表述得更准确、更具体吗?比这更具体吗我发布了一张图片和完整的工作代码片段。。。老实说,我认为现在这个问题已经太长了,细节太多了。我应该详细说明哪些部分?我的意思是,恰恰相反。你的问题太多细节了。你能换个说法问一个具体的问题吗?有道理。我在顶部添加了问题的摘要版本。我没有信心删除详细的部分,所以我现在就把它放在那里:我想我找到了为什么这是如此复杂。所以可能 我的问题与这些有关