gpt4 book ai didi

python - 在 python 中使用 Mann Kendall 处理大量数据

转载 作者:太空宇宙 更新时间:2023-11-04 02:39:46 24 4
gpt4 key购买 nike

我有一组 46 年的降雨数据。它采用 46 个 numpy 数组的形式,每个数组的形状为 145, 192,因此每年在给定模型的每个纬度和经度坐标处都是不同的最大降雨量数据数组。

我需要通过对 46 年来的每个坐标进行 M-K 检验 (Mann-Kendall) 来创建 tau 值的全局 map 。

我仍在学习 python,所以我一直无法找到一种方法来以一种简单的方式遍历所有数据,而无需为每个坐标创建 27840 个新数组。

到目前为止,我已经研究了如何使用 scipy.stats.kendalltau并使用此处的定义:https://github.com/mps9506/Mann-Kendall-Trend

编辑:

为了澄清和添加更多细节,我需要对每个坐标进行测试,而不仅仅是对每个文件单独进行测试。例如,对于第一个 M-K 测试,我希望 x=46 并且我希望 y=data1[0,0],data2[0,0],data3[0,0]...data46[0,0 ].然后对每个数组中的每个坐标重复此过程。 M-K 测试总共将进行 27840 次,并给我留下 27840 个 tau 值,然后我可以将其绘制在全局 map 上。

编辑 2:

我现在遇到了另一个问题。离开建议的代码,我有以下内容:我在范围内(145):
对于范围内的 j(192):
out[i,j] = mk_test(yrmax[:,i,j],alpha=0.05)
打印出来

我使用 numpy.stack 将所有 46 个数组堆叠成一个数组 (yrmax),形状为:(46L, 145L, 192L) 我已经测试过了如果我将代码从 out[i,j] 更改为 just out,它会正确计算 p 和 tau。但是,这样做会弄乱 for 循环,因此它只获取最后一个坐标的结果,而不是所有坐标的结果。如果我保留上面的代码,我会得到错误:TypeError: list indices must be integers, not tuple

我的第一个猜测是它与 mk_test 以及在定义中应该如何返回信息有关。所以我尝试更改上面链接中的代码以更改数据的返回方式,但我不断收到与元组相关的错误。所以现在我不确定哪里出了问题以及如何解决。

编辑 3:

我想我应该补充一点。我已经修改了链接中的定义,因此它只返回我想要用于创建 map 的两个数值,p 和 z。

最佳答案

我不认为这是一个像您想象的那么大的问题。根据您的描述,听起来您实际上并不想要 scipy kendalltau,而是您发布的存储库中的函数。这是我设置的一个小例子:

from time import time

import numpy as np
from mk_test import mk_test

data = np.array([np.random.rand(145, 192) for _ in range(46)])
mk_res = np.empty((145, 192), dtype=object)
start = time()
for i in range(145):
for j in range(192):
out[i, j] = mk_test(data[:, i, j], alpha=0.05)
print(f'Elapsed Time: {time() - start} s')

Elapsed Time: 35.21990394592285 s

我的系统是 MacBook Pro 2.7 GHz Intel Core I7 和 16 GB Ram,所以没什么特别的。

mk_res 数组(形状 145、192)中的每个条目都对应于您的一个坐标点,并且包含如下条目:

array(['no trend', 'False', '0.894546014835', '0.132554125342'], dtype='<U14')

可能有用的一件事是修改 mk_test.py 中的代码以返回所有数值。因此,您可以返回 0/1/-1,而不是“无趋势”/“正”/“负”,True/False 返回 1/0,这样您就不必担心整个对象数组类型。我不知道你可能想在下游进行什么样的分析,但我想这会先发制人地避免任何麻烦。

关于python - 在 python 中使用 Mann Kendall 处理大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46856314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com