行组织栅格文件到列组织栅格文件

Row organized raster file to Column organized raster file

我有一个具有以下值的 (2x3) 光栅文件:

-5-6
-4-5
-1-2

通常情况下,.xyz GIS 文件格式会按列组织,由以下 numpy 数组表示:(坐标在左下角)

col = numpy.array([[0,0,-1],[1,0,-2],[0,1,-3],[1,1,-4],[0,2,-5],[1,2,-6]]) 

不幸的是我有一个行组织结构(来自这个数据来自https://www.opengeodata.nrw.de/)。它可以用下面的numpy数组表示:

row = numpy.array([[0,0,-1],[0,1,-3],[0,2,-5],[1,0,-2],[1,1,-4],[1,2,-6]])
print (row)
[[ 0  0 -1]
 [ 0  1 -3]
 [ 0  2 -5]
 [ 1  0 -2]
 [ 1  1 -4]
 [ 1  2 -6]]

我需要将这个行数组重新排列成一个列数组。我目前正在使用此代码:

rr = row.reshape(2,3,3)
stack = numpy.column_stack(rr[:,:,:])
new_col =(stack.reshape(-1,3))
print (new_col)

[[ 0  0 -1]
 [ 1  0 -2]
 [ 0  1 -3]
 [ 1  1 -4]
 [ 0  2 -5]
 [ 1  2 -6]]

这行得通,但我的问题是:这是解决此数组转换的最佳方法吗?我对操作 numpy 数组没有什么经验。 谢谢 尼古拉斯

我觉得你做的很好,但为了便于阅读,我会使用

stack = numpy.hstack(rr)

而不是

stack = numpy.column_stack(rr[:,:,:])

您可以使用transpose方法重新排列坐标轴。

import numpy

col = numpy.array([[0,0,-1],[1,0,-2],[0,1,-3],[1,1,-4],[0,2,-5],[1,2,-6]])
row = numpy.array([[0,0,-1],[0,1,-3],[0,2,-5],[1,0,-2],[1,1,-4],[1,2,-6]])

# New solution
new_col = row.reshape(2,3,3).transpose(1,0,2).reshape(-1,3)

print(numpy.array_equal(col, new_col))

它比使用 column_stackhstack 更快。