是否可以使用 gdal 的 WriteArray 逐行写入数据,而不是创建并提供整个数组?
我MemoryError
在创建一个大小为 (50539,98357) 的 numpy 数组时遇到了问题。我想我可以通过使用 PyTables来解决这个问题,但我不想让事情复杂化
>>> import numpy
>>> cols = 50539
>>> rows = 98357
>>> a1 = np.zeros((cols,rows))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'np' is not defined
>>> import numpy as np
>>> a1 = np.zeros((cols,rows))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
MemoryError
更新: 我最终使用了 Abudis 的解决方案和一个稀疏矩阵,我在其中保存了点,将每一行作为“密集”或标准矩阵拉出。欢迎评论。
dataset = driver.Create(filename, cols, rows, number_of_bands, band_type)
band = dataset.GetRasterBand(1)
offset = 1 # i.e. the number of rows to write with each iteration
# values, pixel_x, and pixel_y defined earlier in my script
data = scipy.sparse.csr_matrix((values,(pixel_y,pixel_x)),dtype=float)
# iterate data writing for each row in data sparse array
for i in range(data.shape[0]):
data_row = data[i,:].todense() # output row of sparse array as standard array
band.WriteArray(data_row,0,offset*i)
band.SetNoDataValue(NULL_VALUE)
band.FlushCache()