利用两期土地利用数据构造混淆矩阵(土地利用面积转移矩阵)

前言

假设有两期用地数据2012年和2017年,分成三种用地类型,首先得到这两期数据的栅格图像,每个栅格单元存储的值代表一种用地类型,然后以矩阵的方式读入内存中,再用numpy的flatten的方法将其一维化,最后调用python机器学习库sklearn.metrics中的confusion_metrix方法进行计算。

from sklearn.metrics import confusion_matrix
import numpy as np

a = np.array([[1, 2], [3, 1]])  # 代表2012用地数据
b = np.array([[1, 3], [1, 2]])  # 代表2017
a = a.flatten()
b = b.flatten()
res = confusion_matrix(a, b)
print(res)

#  输出结果:
#  [[1 1 0]
#  [0 0 1]
#  [1 0 0]]

取结果第一行第一列的值(1,1)= 1,表示2012年为1的用地类型在2017年也为1的用地类型有1个。(1, 2) = 1 表示2012年为1的用地类型在2017年也为2的有1个地块。

实际案例

以四川2000年和2010年土地利用变化数据为例,首先将两份数据保存为png格式的栅格图片,然后读入Python中,构建混淆矩阵,即可计算出土地利用面积转移矩阵:

import numpy as np
import sys, os
sys.path.append(os.pardir)
from PIL import Image
from sklearn.metrics import confusion_matrix


sc_lucc_2000_img = Image.open('F:\\Temp\\SCLUCC2000.png')
sc_lucc_2010_img = Image.open('F:\\Temp\\SCLUCC2010.png')
sc_lucc_2000_array = np.asarray(sc_lucc_2000_img).flatten()
sc_lucc_2010_array = np.asarray(sc_lucc_2010_img).flatten()
transition_area = confusion_matrix(sc_lucc_2000_array, sc_lucc_2010_array)
print(transition_area)

计算结果:

与另一博主(数据由他提供)计算结果完全一致:https://blog.csdn.net/XiaoQingwaShine/article/details/95501091?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control

但计算和操作过程简便了许多。

微信

欢迎关注我的微信鼓励我继续写文章分享知识~

 
 
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页