python - 移动数组以使第一列和最后一列相邻
问题描述
我正在努力如何在问题标题中解释这一点,所以我会在这里做得更好。
我有一个包含 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”非洲。
如何移动/转换我的数组以使第一列和最后一列相邻?
(额外:由于您可以将我的数组视为圆柱体,因此在地理上,第一行和最后一行是相邻的,但是我如何更改“圆柱体被切割”的位置 - 我一直在考虑的类比)
解决方案
解决方案是使用numpy.roll()
.
我首先使用以下方法找到了与 180E 对应的列的索引:
idx = (longitude.index(180))
然后,我根据该索引“滚动”数据以将 180E 移动到最左列,使用:
rolled_data = np.roll(data, idx, axis=1)
这成功地将 0E 列居中以创建我想要的输出。
推荐阅读
- javascript - 获取围绕中心点js的位置窗口
- file - 在 dm-script 中将文本附加到文件的最佳方法
- c# - 使用 c# 和互操作选择过滤范围中的第一行
- python - 将四元数值从 IMU 重置为 X:0,Y:0,Z:0,W:1
- javascript - 如何在 React-native 中加载脚本?
- java - 将外部 jar 添加到 Maven 存储库不起作用
- javascript - 如何在html中循环随机化javascript函数
- javascript - 在Nodejs中使用axios多次获取请求
- nginx - 通过 Cloudflare 后面的站点阻止使用 NGINX 的直接 IP 访问
- javascript - 如何使用jQuery动态获取复选框检查的列值的总和