获取 Python 中二维数组的索引

Get Index of 2D array in Python

我使用 gdal 模块中的 osgeo 来处理地理栅格数据。

#Get size of input raster (cols, rows)
cols = ds.RasterXSize #3531
rows = ds.RasterYSize #3314

为了读取所有数据,我创建了一个数组:

data = band.ReadAsArray(0, 0, cols, rows).astype(float)

ReadAsArray 的结果是一个二维 numpy 数组。直到这里它才有效。

因此,为了进一步对该栅格中的每个像素应用地理变换,我需要每个像素的列索引和行索引。我想我可能需要一个 numpy 函数来读出它,但我不知道它如何处理二维数组。

我可以通过简单地调用它的索引(例如 band[0][1])来访问数组中的项目,但是我需要将整个列索引和整个行索引分别存储在例如col_idx 和 row_idx.

我尝试过类似的方法,但没有成功:

for idx, val in enumerate(ints):
    print idx, val

感谢任何帮助!

你可以使用numpy.meshgrid

i, j = numpy.meshgrid(range(ncols), range(nrows))
result = f(data, i, j)

例子

In [28]: nrows = 2 ; ncols = 4

In [29]: icol, irow = np.meshgrid(range(ncols),range(nrows))

In [30]: def a(r,c): return 100*r+c

In [31]: a(irow, icol)
Out[31]: 
array([[  0,   1,   2,   3],
       [100, 101, 102, 103]])

In [32]: 

数据是 XXXL?

在这种情况下,您可以在数组的行上使用 for 循环,而不是使用行和列索引生成两个大矩阵(它 较慢 但不是像双 for 循环一样慢)

icol = range(ncols)
for irow, row in enumerate(data):
    if irow>0:
         result = np.vstack((result, f(row, irow, icol)))
    else:
         result = f(row, irow, icol)