我正在努力在问题标题中解释这一点,所以我会在这里做得更好。
我有一个数组,其中包含360列和180行,分别代表地球上每个纬度和经度。为了清楚起见,我的数据如下所示:
const data = str.split('|').reduce((acc, val) => {
const [key, value] = val.split('=');
acc[key] = value;
return acc;
}, {});
data.c // 3
它看起来像this,其中经度'0'等于0E,'359'等于-1E。
如您所见,非洲在数组的开始和结尾处被分割,我想移动数组,以便第一列对应于-180E,最后一列对应于180E,就像传统的世界视图( map)-这会将子集细分为“ Cookie Cut”非洲。
如何移动/变换数组以使第一列和最后一列相邻?
(额外:由于您可以将我的数组视为圆柱体,因此在地理位置上,第一行和最后一行是相邻的,但是我如何更改“圆柱体切割”的位置-我一直在思考的类比)
答案 0 :(得分:1)
解决方案是使用numpy.roll()
。
我首先使用以下方法找到对应于180E的列的索引:
idx = (longitude.index(180))
然后,我基于此索引“滚动”数据,以使用以下命令将180E移至最左边的列:
rolled_data = np.roll(data, idx, axis=1)
这成功地将0E列居中以创建所需的输出。
答案 1 :(得分:-1)
请查看以下答案:Efficient way to shift a list in python
似乎可以按照自己的意愿做。
从接受的答案中获取
:from collections import deque
items = deque([1, 2])
items.append(3) # deque == [1, 2, 3]
items.rotate(1) # The deque is now: [3, 1, 2]
items.rotate(-1) # Returns deque to original state: [1, 2, 3]
item = items.popleft() # deque == [2, 3]