行组织栅格文件到列组织栅格文件
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_stack
或 hstack
更快。
我有一个具有以下值的 (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_stack
或 hstack
更快。