助教课遇到这个题目,用python写了一个,放在这里备忘吧。

# -*- coding: utf-8 -*-
# ---------------------------------------------------------------------------
# Markov.py
# Created on: 2021-04-03 21:32:05
#   (generated by WCJ)
# Description:
# ---------------------------------------------------------------------------import os
import sys
import numpy as np
from sklearn.metrics import confusion_matrix
from PIL import Image
# sys.path.append(os.pardir)def transition_matrix(Start_LUCC_image, End_LUCC_image):# 读取影像灰度值(包含空值)Start_LUCC_image = Image.open(Start_LUCC_image)End_LUCC_image = Image.open(End_LUCC_image)# 重排列数组。flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组。lucc_start_array = np.asarray(Start_LUCC_image).flatten()lucc_end_array = np.asarray(End_LUCC_image).flatten()# 构建混淆矩阵transition_area = confusion_matrix(lucc_start_array, lucc_end_array)# 提取有效区域(去除空值),得到土地利用面积转移矩阵trans_matr = transition_area[:len(transition_area) - 1, :len(transition_area) - 1]print("transition_matrix:", "\n", trans_matr)return trans_matrdef markov(trans_matr, Start_year, End_year, Pred_year):sum_Start_year = trans_matr.sum(axis=1)  # 按行求各地类和sum_End_year = trans_matr.sum(axis=0)  # 按列求各地类和whole_area = trans_matr.sum()  # 计算总栅格数P_End_year = sum_End_year / trans_matr.sum()  # 计算初始状态矩阵# 计算一阶转移概率矩阵Ptrans0 = np.empty(trans_matr.shape)for i in range(len(sum_Start_year)):Ptrans0[i] = trans_matr[i] / sum_Start_year[i]# 计算转移概率矩阵n = int((Pred_year - End_year) / (End_year - Start_year))print(n)E = np.identity(len(sum_Start_year))for i in range(n):E = np.dot(E, Ptrans0)Ptrans = E# 计算预测年份状态矩阵P_Pred_year = np.dot(P_End_year, Ptrans)# 计算预测年份各地类面积Pred_year_area = np.array(np.around(P_Pred_year * whole_area), dtype=int)np.set_printoptions(formatter={'float': '{: 0.6f}'.format})print("转移概率矩阵:", "\n", np.around(Ptrans, decimals=6))print("预测年份状态矩阵:", "\n", np.around(P_Pred_year, decimals=6))print("预测年份各地类面积:", Pred_year, "年\n", Pred_year_area)return Ptrans, P_Pred_year, Pred_year_areadef Save(Pred_year, Ptrans, P_Pred_year, Pred_year_area):outpath = "F:\\test\FilesGenerate\\model_out_" + str(Pred_year) + ".txt"with open(outpath, 'w') as f:  # 写入numpy.ndarray数据# with open("F:\\test\FilesGenerate\\model_out.txt", 'w') as f:  # 写入numpy.ndarray数据f.write('%d' % Pred_year)f.write(":\n")f.write("转移概率矩阵:\n")np.savetxt(f, np.round(Ptrans, 6), delimiter="\t", fmt="%.6f")# 使用numpy.savetxt()写入数据,Data为要存的变量,因为numpy.ndarray数据无法用write()写入,数据间用','相隔。f.write("预测年份状态矩阵:\n")np.savetxt(f, np.round(P_Pred_year, 6), delimiter="\t", fmt="%.6f")f.write("预测年份各地类面积:\n")np.savetxt(f, Pred_year_area, delimiter="\t", fmt="%s")# f.write("\n")  # 换行f.close()  # 关闭if __name__ == '__main__':# 读取影像灰度值(包含空值)lucc_2010_img = r'F:\test\FilesGenerate\Re_guangzhou2010.tif'lucc_2015_img = r'F:\test\FilesGenerate\Re_guangzhou2015.tif'trans_matr = transition_matrix(lucc_2010_img, lucc_2015_img)Ptrans, P_Pred_year, Pred_year_area = markov(trans_matr, Start_year=2010, End_year=2015, Pred_year=2020)Save(2020, Ptrans, P_Pred_year, Pred_year_area)

单纯做Markov预测的话,可以利用一个师兄开发的CA软件中的相关模块来做:
http://www.geosimulation.cn/FLUS.html

基于Python构建土地利用转移矩阵及完成Markov预测相关推荐

  1. 【大数据分析专业毕设之基于python爬虫的电影票房大数据预测分析+大屏可视化分析

    [大数据分析专业毕设之基于python爬虫的电影票房大数据预测分析+大屏可视化分析-哔哩哔哩https://b23.tv/saIKtBH flask web框架,数据使用requests模块爬取数据, ...

  2. 【Python】基于Python的机器学习回归:可视化、预测及预测结果保存(附代码)

    目录 0 一个交互性的软件 0 大无语事件 1 简介 2 数据 3 代码 4 效果 5 关于数据获取 0 一个交互性的软件 基于相关需求,我使用python封装了一个交互性机器学习回归软件,现已依托单 ...

  3. 基于python的搜索引擎论文_技术分享 - 基于python构建搜索引擎系列——(四)检索模型...

    构建好倒排索引之后,就可以开始检索了. 检索模型有很多,比如向量空间模型.概率模型.语言模型等.其中最有名的.检索效果最好的是基于概率的BM25模型. 给定一个查询Q和一篇文档d,d对Q的BM25得分 ...

  4. 基于Python构建上市公司高送转预测模型

    一.问题 对中国上市公司高送转行为及影响因素进行分析,构建上市公司高送转预测模型,并根据预测结果设计量化投资策略及进行分析.数据获取可通过tushare金融大数据社区API获得. 二.基本思路 1.高 ...

  5. 机器学习系列8 基于Python构建Web应用以使用机器学习模型

    课前测验 本文所用数据及源码免费下载 目录 一.内容介绍 二.应用构建 1.构建机器学习Web应用的思考 ①思考问题 ②几种构建机器学习模型 Web 应用的方法. 2.工具安装 3.数据预处理 ①数据 ...

  6. python用户名和密码登录函数_基于Python构建用户ID和密码存储查询系统,python,建立,一个,用户名,UserID,Password,的...

    大家好,本篇博客目的是建立存储和查询用户名和密码的python系统,基础好的可跳过中间小干货,源码在末尾,喜欢的留下小赞哦! 系统主要功能 主要功能如下: 创建一个新用户及其密码 修改值定用户的密码 ...

  7. 基于Python实现LSTM对股票走势的预测【100010285】

    摘要 为对股票价格的涨跌幅度进行预测,本文使用了基于长短期记忆网络(LSTM)的方法.根据股票涨跌幅问题, 通过对股票信息作多值量化分类,将股票预测转化成一个多维函数拟合问题.将股票的历史基本交易信息 ...

  8. python 数据分析 电信_基于Python的电信客户流失分析和预测

    一.项目背景 电信服务是生活中常见的消费服务,在现代社会,凡是使用手机打电话,或者在家看电视,都必须通过电信运营商提供的通话.网络等服务才能实现.本文采用来自kaggle平台的电信客户数据集,来分析人 ...

  9. 基于python数据分析(分析篇七:预测/误差)

    一.预测,回归 算法:为了完成某个计算而执行的任何过程. 1.散点图的使用 只要是涉及到两种变量都应该使用(根本在于看出散点图两种变量中的之间的关系) 散点图:用于展现数据快捷经典的方式,现实的是数据 ...

  10. 基于Python机器学习对某地区房地产数据分析预测报告

    定义挖掘目标: **1.**房价和哪些因素有关,在之后的中介推销中重点关注 **2.**开发商该如何建造房屋才能让更多的客户来选择购买居住 **3.**预估房屋价值,给房产中介提供合理的房价信息 完整 ...

最新文章

  1. Java记录 -55- Set下的HashSet
  2. TypeScript + Gulp + 混淆 + 打包
  3. jenkins修改数据存放路径
  4. angular-代码段
  5. Linux系统下如何设置IP地址?
  6. armbian n1 桌面_Armbian5.89桌面版安装OpenMediaVault教程
  7. 大商创x源码|大商创x全套源码|大商创小程序源码|大商创APP源码
  8. linux 指令熟悉
  9. 记一次Process finished with exit code 1 项目异常
  10. 数显电接点压力表与指针电接点压力表的区别
  11. OSPF学习小结与实验
  12. day08 操作索引脏读、幻读、不可重复读 python复习
  13. 【产业互联网周报】硅谷多家IT大厂组成现代计算联盟,提供企业云上服务;台积电新封装技术2023年投产...
  14. 经济寒冬中获3000万美元融资,这家企业凭什么打动投资者
  15. 鸿蒙大战是什么,混沌氏(浑沌)、鸿蒙氏,盘古开天辟地时两个最强大的部落首领?...
  16. HTML+CSS 土豆网鼠标经过显示遮罩
  17. tp5出现“continue“ targeting switch is equivalent to “break“. Did you mean to use “continue 2“?错误解决方法
  18. 如何在线制作思维导图?(普通制作流程)
  19. 用c语言表达圣诞节快乐的英文,圣诞节快乐用英文怎么说
  20. 程序猿媳妇儿注意事项

热门文章

  1. CSS中常用中文字体(font-family)的英文名称
  2. CAN协议详解-01
  3. 深度学习中的9种归一化方法概述
  4. Java线程同步和锁定
  5. jquery weui 显示loading
  6. 新益华基层医疗系统使用方法_MongoDB for VS Code:使用Mongo的新方法
  7. 项目经理(甲方)推行ERP,需要做些什么?
  8. 逻辑表达式三种化简方法
  9. 数论基础——扩展欧几里德算法解析
  10. TCP / UDP测试工具——tcpudptest使用总结