Python:通过迭代加速矩阵坐标映射

2024-10-01 09:22:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图让这段代码尽可能快地运行,但目前效率很低。在

我有一个4D的标量数据矩阵。这4个维度分别对应纬度、经度、海拔和时间。数据存储在numpy数组中,其形状为(5,5,30,2)。在

在4个不同的列表中,我保存每个轴的“映射”,存储每个索引对应的值。例如,贴图数组可能看起来像:

mapLatitude = [45.,45.2,45.4,45.6,45.8]
mapLongitude = [-10.8,-10.6,-10.4,-10.2,-10.]
mapAltitude = [0,50,100,150,...,1450]
mapTime = [1345673,1345674]

这意味着在数据矩阵中,位置0,1,3,0处的数据点对应于
纬度=45,经度=10.6,海拔高度=150,时间=1345673。在

现在,我需要生成一个包含数据矩阵中每个点坐标的新数组。在

到目前为止,我写的是:

^{pr2}$

这是可行的,但需要相当长的时间,尤其是当数据矩阵的大小增加时(我需要将此用于形状类似(100100150,30))的矩阵。在

如果有帮助的话,我需要生成这个coordinateMatrix来将它提供给scipy.interpolate.NearestNDInterpolator。在

有什么建议可以加快速度吗?
非常感谢你!在


Tags: 数据代码numpy列表时间矩阵数组效率
1条回答
网友
1楼 · 发布于 2024-10-01 09:22:32

如果将列表转换为ndarray,则可以使用广播,如下所示:

coords = np.zeros((5, 5, 30, 2, 4))
coords[..., 0] = np.array(mapLatitude).reshape(5, 1, 1, 1)
coords[..., 1] = np.array(mapLongitude).reshape(1, 5, 1, 1)
coords[..., 2] = np.array(mapAltitude).reshape(1, 1, 30, 1)
coords[..., 3] = np.array(mapTime).reshape(1, 1, 1, 2)

对于更一般的输入,类似这样的方法应该有效:

^{pr2}$

相关问题 更多 >