python如何实现MK突变检验方法,代码复制修改可用
作者:David_wangzw 发布时间:2022-04-10 13:31:18
标签:python,MK,突变检验
需求
已知年份和历年最大冻土深度,计算最大冻土深度Mk突变检验。
原理
工具和语言
python
jupter notebook
代码过程
定义函数
def mktest(inputdata):
import numpy as np
inputdata = np.array(inputdata)
n=inputdata.shape[0]
Sk = np.zeros(n)
UFk = np.zeros(n)
r = 0
for i in range(1,n):
for j in range(i):
if inputdata[i] > inputdata[j]:
r = r+1
Sk[i] = r
E = (i+1)*i/4
Var = (i+1)*i*(2*(i+1)+5)/72
UFk[i] = (Sk[i] - E)/np.sqrt(Var)
Sk2 = np.zeros(n)
UBk = np.zeros(n)
inputdataT = inputdata[::-1]
r = 0
for i in range(1,n):
for j in range(i):
if inputdataT[i] > inputdataT[j]:
r = r+1
Sk2[i] = r
E = (i+1)*(i/4)
Var = (i+1)*i*(2*(i+1)+5)/72
UBk[i] = -(Sk2[i] - E)/np.sqrt(Var)
UBk2 = UBk[::-1]
return UFk, UBk2
定义函数计算变量
```python
def mktest(inputdata):
import numpy as np
inputdata = np.array(inputdata)
n=inputdata.shape[0]
s = 0
Sk = np.zeros(n)
UFk = np.zeros(n)
for i in range(1,n):
for j in range(i):
if inputdata[i] > inputdata[j]:
s = s+1
else:
s = s+0
Sk[i] = s
E = (i+1)*(i/4)
Var = (i+1)*i*(2*(i+1)+5)/72
UFk[i] = (Sk[i] - E)/np.sqrt(Var)
Sk2 = np.zeros(n)
UBk = np.zeros(n)
s = 0
inputdataT = inputdata[::-1]
for i in range(1,n):
for j in range(i):
if inputdataT[i] > inputdataT[j]:
s = s+1
else:
s = s+0
Sk2[i] = s
E = (i+1)*(i/4)
Var = (i+1)*i*(2*(i+1)+5)/72
UBk[i] = -(Sk2[i] - E)/np.sqrt(Var)
UBk2 = UBk[::-1]
return UFk, UBk2
导入变量 ,形成突变检验图
import matplotlib.dates as mdates #處理日期
import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl
from matplotlib.pyplot import MultipleLocator
mpl.rcParams['font.sans-serif'] = ['SimHei'] #防止标题出现乱码。
plt.rcParams['axes.unicode_minus'] = False #防止出现图上的负数为方框。
# y值和x值 分别输入六个站点的最大冻土深度值,将值以列表的方式导入
a = [150,150,114,109,96,95,83,76,109,80,115,80,94,86,133,91,110,116,114,128,172,172,
162,121,175,151,110,92,116,156,134,110,89,97,109,157,153,105,76,87,122,78,97,93,141,162,
123,133,161,128,138,104,133,102,140,109,118,86,126,92,121,149,116] #这个部分值可以替换成为要检验的气温、水文等值
x_values=list(range(1961,2022))
uf,ub = mktest(a)
plt.figure(figsize=(8,4)) #图片的大小
plt.plot(uf,'r',label='UFk')
plt.plot(ub,'b',label='UBk')
plt.xticks([0,5,10,15,20,25,30,35,40,45,50,55,60],['1960','1965','1970','1975','1980','1985','1990','1995','2000','2005','2010','2015','2020',])
#将默认的x轴数值替换为年份的X轴,默认是0-61,一共62个值,代表X轴内容。
# 0.01显著性检验
plt.legend()
plt.axhline(1.96)
plt.axhline(-1.96)
#设置图片的标签(标题)
plt.title("富蕴点最大冻土深度突变检验结果")#x轴上的名字
plt.xlabel("年份(1960年-2022年)")#x轴上的名字
plt.ylabel("突变值波动参数")#y轴上的名字
plt.grid() #形成网格线输出
x_major_locator=MultipleLocator(5)
plt.show()
最后成图以后的样子。
来源:https://blog.csdn.net/weixin_52753312/article/details/127953122


猜你喜欢
- 在Windows系统中用“Ctrl+C”和“Ctrl+V”就可以完成复制、粘贴工作,是不是很爽?其实使用a标签的accesskey属性也可以
- 在过去的十年中,MySQL已经成为广受欢迎的数据库,而WordPress博客使用的是MySQL数据库,虽然使用插件可以解决一些问题,但是实现
- 在开发过程中,会遇到在命令行下将DOC文档(或者是其他Office文档)转换为PDF的要求。比如在项目中如果手册是DOC格式的,在项目发布时
- 删除一条留言信息会级联删除回复信息,这时我们需要用到事务,如下SQLALTER PROCEDURE [dbo].[proc_tb_leave
- 问题: 在Python爬虫的过程中经常要模拟UserAgent, 因此自动生成UserAgent十分有用, 最近看到一个Python库(fa
- 以住做B/S的系统都是以IE浏览器为主,基本上忽略其他的浏览器,这次决定来个大兼容,但在实现背景渐变上就是个 * 烦。本想用图片来实现的,但要
- 工具python3.7PycharmPDFPyPDF2reportlab从PDF中提取文本PyPDF2没有办法从PDF文档中提取图像、图表或
- 本文实例总结了PHP常用字符串函数用法。分享给大家供大家参考,具体如下:字符串函数explore使用一个字符串分割另一个字符串结果为数组&l
- 核心提示:本文针对mysql-noinstall版本,也就是解压缩版的安装配置应用做了个总结,这些操作都是平时很常用的操作。文章中不对mys
- VueX浏览器刷新保存数据在vue项目中用vuex来做全局的状态管理, 发现当刷新网页后,保存在vuex实例store里的数据会丢失。原因:
- 复杂度可能高了点- - 也没太注意我想了好久 也找了好久 没看到什么能够用python解决n皇后问题而且不调用递归的 因为我不太能理解递归(
- 先简单做个分享,有时间再补一个完整的用例self.textEdit = QtGui.QTextEdit(slef)1.设置背景颜色self.
- 简介正则表达式本身是一种小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配。正则表达
- 一 什么是读写分离虽然知道处理大数据量时,数据库为什么要做读写分离,原因很简单:读写分离是MySQL优化的一方面,它可以提高性能,缓解数据库
- 但是怎么找到是哪个SQL语句的执行时间过长呢?可以通过MySQL Slow Log来找,详解如下。 首先找到MySQL的配置文件my.cnf
- 1.获得盘名os.path.splitdrive(path)import ospath="C:\\Users\\wuyanzu\\
- 上一小节讲解了行高与单行纯文字的垂直居中,而如果行内含有图片和文字,在浏览器内浏览时,读者可以发现文字和图片在垂直方向并不是沿中线居中,而是
- 想当初,考研的时候要是知道有这么个好东西,计算定积分。。。开玩笑,那时候计算定积分根本没有这么简单的。但这确实给我打开了一种思路,用编程语言
- 1.腾讯企业邮箱SMTP服务器地址:smtp.exmail.qq.com,ssl端口为:4652.确保腾讯企业邮箱中开启了SMTP服务:3.
- 属性 值 描述 onchange 脚本 当元素改变时执行脚本 onsubmit 脚本 当表单被提交时执行脚本 onreset 脚本 当表单被