关于#NumPy#的问题,如何解决?

现有两个栅格数据:1991-1999.tif、2000-2008.tif,需要通过RasterToNumPyArray (arcpy)、numpy将这两个栅格数据拼接,使其成为1991-2008.tif
没有用栅格计算器操作是因为相位越界了,需要将栅格数据转为数组进行拼接。
这是两个数据的属性表。

img

img

结果例子:有1991-1994.tif 和1995-1998.tif,通过栅格转数组拼接为1991-1998.tif

img

img


结果为

img


是这样的形式。

以下内容引用CHATGPT、有用望采纳:

可以使用RasterToNumPyArray将栅格数据转换为numpy数组,然后使用numpy.concatenate将两个数组拼接起来,最后使用numpy.save将结果保存为tif格式的栅格数据。

具体代码如下:

import arcpy
import numpy as np

# 读取栅格数据并转换为numpy数组
arr_1991_1999 = arcpy.RasterToNumPyArray("1991-1999.tif")
arr_2000_2008 = arcpy.RasterToNumPyArray("2000-2008.tif")

# 拼接两个数组
arr_1991_2008 = np.concatenate((arr_1991_1999, arr_2000_2008), axis=2)

# 保存结果为tif格式的栅格数据
np.save("1991-2008.npy", arr_1991_2008)
arcpy.NumPyArrayToRaster(arr_1991_2008, arcpy.Point(0, 0), 1, 1).save("1991-2008.tif")

需要注意的是,拼接时需要指定axis参数为2,表示在第三个维度(即时间维度)上进行拼接。保存结果时,需要使用NumPyArrayToRaster将数组转换为栅格数据,并指定左上角坐标和像素大小。

该回答引用ChatGPT
根据题目描述,需要将两个栅格数据拼接成一个栅格数据,可通过RasterToNumPyArray (arcpy)、numpy实现。具体操作如下(假设两个数据为data1.tif和data2.tif):

1. 导入模块

python
import arcpy
import numpy as np


2. 读取栅格数据并转化为numpy数组

python
data1 = arcpy.RasterToNumPyArray("data1.tif")
data2 = arcpy.RasterToNumPyArray("data2.tif")


3. 检查数据形状

python
print(data1.shape) # (行数,列数)
print(data2.shape)


4. 拼接数据

python
data = np.concatenate((data1, data2), axis=0) # 按行拼接
# 或者
# data = np.concatenate((data1, data2), axis=1) # 按列拼接


注:np.concatenate() 函数用于沿着一个轴将多个数组堆叠起来。

5. 保存拼接后的栅格数据

python
newRaster = arcpy.NumPyArrayToRaster(data)
newRaster.save("1991-2008.tif") # 保存为一个新的栅格数据


完整代码如下:

python
import arcpy
import numpy as np

data1 = arcpy.RasterToNumPyArray("1991-1999.tif")
data2 = arcpy.RasterToNumPyArray("2000-2008.tif")
print(data1.shape) # (行数,列数)
print(data2.shape)

data = np.concatenate((data1, data2), axis=0) # 按行拼接
# 或者
# data = np.concatenate((data1, data2), axis=1) # 按列拼接

newRaster = arcpy.NumPyArrayToRaster(data)
newRaster.save("1991-2008.tif") # 保存为一个新的栅格数据


以上就是使用arcpy和numpy拼接栅格数据的操作方法。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先需要导入相应的库:

import arcpy
import numpy as np

然后利用arcpy中的RasterToNumPyArray将两个栅格数据转为numpy数组:

arr_1991_1999 = arcpy.RasterToNumPyArray("1991-1999.tif")
arr_2000_2008 = arcpy.RasterToNumPyArray("2000-2008.tif")

其中,"1991-1999.tif""2000-2008.tif"为两个栅格数据的路径。接着,利用numpy中的concatenate函数将这两个数组进行拼接:

arr_1991_2008 = np.concatenate((arr_1991_1999, arr_2000_2008), axis=2)

其中,axis=2表示沿着第三个维度进行拼接,即将两个数组的第三个维度进行拼接。最终得到的arr_1991_2008即为拼接后的数组。

完整代码如下:

import arcpy
import numpy as np

arr_1991_1999 = arcpy.RasterToNumPyArray("1991-1999.tif")
arr_2000_2008 = arcpy.RasterToNumPyArray("2000-2008.tif")
arr_1991_2008 = np.concatenate((arr_1991_1999, arr_2000_2008), axis=2)

如果我的回答解决了您的问题,请采纳!