gdal WriteArray()使python没有堆栈跟踪而崩溃

时间:2019-03-01 15:24:17

标签: python numpy gdal

我正在尝试使用gdal将数组写入Geotiff。数组的每一行都是相同的,我使用np.broadcast_来创建数组。

当我尝试编写它时,出现一个窗口弹出窗口,提示“ Python已停止工作:问题导致程序无法正常工作。请关闭程序”。

这近似于我正在采取的步骤:

import gdal
import numpy as np

driver = gdal.GetDriverByName('GTiff')
outRaster = driver.Create("C:/raster.tif", 1000, 1000, 1, 6)
band = outRaster.GetRasterBand(1)

# Create  array 
a = np.arange(0,1000, dtype='float32')
a1 = np.broadcast_to(a, (1000,1000))

# try writing
band.WriteArray(a1) # crash

1 个答案:

答案 0 :(得分:0)

问题是由broadcast_to创建的输入数组在磁盘上不连续。如numpy documentation中所述,一个以上的元素数组可以指向相同的内存地址。这会导致问题。

使用某些东西将每个元素存储在内存中,而不是使用broadcast_to。 作为说明性示例,请参见以下代码:

import gdal
import numpy as np
import sys

driver = gdal.GetDriverByName('GTiff')
outRaster = driver.Create("C:/raster.tif", 1000, 1000, 1, 6)
band = outRaster.GetRasterBand(1)

# Create 1000 x 1000 array two different ways
a = np.arange(0,1000, dtype='float32')
a1 = a[np.newaxis, :]
a1 = a1.repeat(1000, axis=0)

a2 = np.broadcast_to(a, (1000,1000))

# examine size of objects
sys.getsizeof(a1) # 4000112
sys.getsizeof(a2) # 112

# try writing
band.WriteArray(a1) # writes fine
band.WriteArray(a2) # crash