移位数组以使第一列和最后一列相邻

时间:2018-08-06 12:48:44

标签: python numpy indexing transform gdal

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

我有一个数组,其中包含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”非洲。

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

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

2 个答案:

答案 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

似乎可以按照自己的意愿做。

从接受的答案中获取

Collections.deque

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]