Python 实现MK检验算法,需要用到numpy模块。需要注意输入文件数据格式为一行一数据如附件data.png.输出文件格式,第一列为UF,第二列为UB,第三四列为-1.96,1.96,如附件output.png。
import numpy as np
def getuf(data):
l = len(data)
s = np.zeros(l,dtype=np.int32)
uf = np.zeros(l)
for i in range(1,l):
r = 0
for j in range(i):
if(data > data[j]):
r = r + 1
s = s[i-1] + r
index = i + 1
e = (index * (index-1)) / 4
v = index * (index - 1) * (2 * index + 5) / 72
uf = (s - e) / np.sqrt(v)
uf = round(uf,2)
return uf
def main():
ufinput = np.loadtxt("data.txt")
uf = getuf(ufinput)
ubinput = ufinput[::-1]
temp = getuf(ubinput) * (-1)
ub = temp[::-1]
a1 = np.empty_like(uf)
a1[:] = -1.96
a2 = a1 * (-1)
output = np.array([uf, ub, a1, a2])
np.savetxt("output.txt", output.T, "%.2f", delimiter = "\t")
if __name__ == '__main__':
main()
一些MK突变检验的例子
MK检验 图的UF UB交点问题及2个小小问题,请高手不吝赐教啦
up-rs-esp
python改写MK趋势检验
github1
github2 question test
论文
中国年降雨量的一阶自相关系数不显著,且其 3 种趋势检验方法结果的差异不明显,可以直接采用普通 Mann-Kendall 对其进行趋势检验。年平均气温和蒸发皿蒸发量的一阶自相关系数显著性较高,需要采用修正 Mann-Kendall 方法进行趋势检验。[章诞武, 丛振涛, 倪广恒. 基于中国气象资料的趋势检验方法对比分析[J]. 水科学进展, 2013, 24(4):490-496.]
本文由 xigrug 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:2018-07-28 22:00:00