首页 > 解决方案 > 移动数组以使第一列和最后一列相邻

问题描述

我正在努力如何在问题标题中解释这一点,所以我会在这里做得更好。

我有一个包含 360 列和 180 行的数组,它们代表地球上每个纬度和经度。为清楚起见,我的数据如下所示:

longitudes = [0, 1, 2 ... 358, 359]
latitudes = [90, -89 ... -89, -90]
data = np.random.randint(5, (180, 360))

看起来像这样,其中经度“0”等于 0E,“359”等于-1E。

如您所见,非洲在数组的开头和结尾处被分割,我想移动数组,使第一列对应于 -180E,最后一列对应于 180E,就像传统的世界观 ( map ) -这将使数组的子集化为“cookie cut”非洲。

如何移动/转换我的数组以使第一列和最后一列相邻?

(额外:由于您可以将我的数组视为圆柱体,因此在地理上,第一行和最后一行是相邻的,但是我如何更改“圆柱体被切割”的位置 - 我一直在考虑的类比)

标签: pythonnumpyindexingtransformgdal

解决方案


解决方案是使用numpy.roll().

我首先使用以下方法找到了与 180E 对应的列的索引:

idx = (longitude.index(180))

然后,我根据该索引“滚动”数据以将 180E 移动到最左列,使用:

rolled_data = np.roll(data, idx, axis=1)

这成功地将 0E 列居中以创建我想要的输出。


推荐阅读