在Python中获取2D数组的索引

时间:2015-01-12 12:01:28

标签: python arrays numpy

我使用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的结果是2D numpy数组。直到这里它才有效。

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

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

我试过类似的东西,但没有工作:

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

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

您可以使用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循环(它的较慢,但不能像double一样慢)环)

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)