meteva

提供气象产品检验相关python程序


Gbeta

<p>[TOC]</p> <pre><code class="language-python">import meteva.base as meb import meteva.method as mem import pprint</code></pre> <pre><code class="language-python">grid1 = meb.grid([100, 120, 0.05], [24, 40, 0.05]) path_ob = r'H:\test_data\input\mem\mode\ob\rain03\20072611.000.nc' path_fo_03 = r'H:\test_data\input\mem\mode\ec\rain03\20072608.003.nc' grd_ob = meb.read_griddata_from_nc(path_ob, grid=grid1, time=&amp;quot;2020072611&amp;quot;, dtime=0, data_name=&amp;quot;OBS&amp;quot;) grd_fo = meb.read_griddata_from_nc(path_fo_03, grid=grid1, time=&amp;quot;2020072608&amp;quot;, dtime=3, data_name=&amp;quot;ECMWF&amp;quot;)</code></pre> <h1>Gbeta方法</h1> <p>&lt;font face=&quot;黑体&quot; color=Blue size=3&gt;<strong>Gilleland (2020) 提出了一些总结措施,并提供了一个介于零(差分)和一(满分)之间的指数,描述了两个场之间空间对齐的接近程度。</strong>&lt;/font&gt; </p> <p>参考文献:Gilleland, E., 2020. Novel measures for summarizing high-resolution forecastperformance. Submitted to Mon. Wea. Rev. on 31 March 2020. Re-submitted on 18May 2020. Re-submitted to Advances in Statistical Climatology, Meteorology andOceanography on 19 July 2020.Temporarily available at:<a href="https://ral.ucar.edu/staff/ericg/Gilleland2020.pdf">https://ral.ucar.edu/staff/ericg/Gilleland2020.pdf</a>.</p> <h2>Gbeta评分</h2> <p>&lt;font face=&quot;黑体&quot; color=Blue size=3&gt;<strong>Gbeta_score(ob, fo, threshold, beta = None, alpha = 0)</strong>&lt;/font&gt; </p> <p>(1)在两个字段A和B之间应用的Gbeta被定义为:<br /> Gbeta(A,B) = max(1-y/beta,0) 这里,y = y1 <em> y2,其中y1是A和B之间重叠的度量(如果它们完全重叠,y1 = 0);它是AB^c和A^cB中的点数,其中^c表示集合的补集。y2 =(MED(A,B)</em> nB + MED(B,A)* nA),其中MED是平均误差距离(有关MED的更多信息,请参阅locperf),nA和nB分别表示集合A和B中值为1的网格点数。如果alpha != 0,则y/beta被替换为(y - alpha) / (beta - alpha)。 </p> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;ob&lt;/font&gt;</strong></td> <td style="text-align: left;">观测数据矩阵,一维或二维numpy数组</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;fo&lt;/font&gt;</strong></td> <td style="text-align: left;">预报数据矩阵,一维或二维numpy数组,shape和观测数据线条</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;threshold&lt;/font&gt;</strong></td> <td style="text-align: left;">阈值</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;beta&lt;/font&gt;</strong></td> <td style="text-align: left;">单个数值,定义了y = y1y2或y = y1y2(1+y3)中的上限,决定了指标减小的速度。默认值是域大小的一半的平方</td> </tr> <tr> <td style="text-align: left;"><strong>alpha</strong></td> <td style="text-align: left;">单个数值,定义了y = y1y2或y = y1y2(1+y3)中的下限,决定了何时构成完美匹配。默认值为零要求两个字段完全相同,在大多数情况下是理想状态</td> </tr> </tbody> </table> <p>&lt;font face=&quot;黑体&quot; color=Blue size=3&gt;<strong>输出结果说明</strong>&lt;/font&gt; </p> <p><strong>计算两个场的线性组合:(i) 两个场之间的重叠量和 (ii) 平均误差距离</strong> </p> <table> <thead> <tr> <th style="text-align: left;">关键词</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;nA&lt;/font&gt;</strong></td> <td style="text-align: left;">实况超阈值的格点数</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;nB&lt;/font&gt;</strong></td> <td style="text-align: left;">预报超阈值的格点数</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;nAB&lt;/font&gt;</strong></td> <td style="text-align: left;">命中格点数</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;nAnB_2nAB&lt;/font&gt;</strong></td> <td style="text-align: left;">nA+nB- 2×nAB, 即漏报+空报数</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;medAB&lt;/font&gt;</strong></td> <td style="text-align: left;">预报目标到观测目标的平均距离</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;medBA&lt;/font&gt;</strong></td> <td style="text-align: left;">观测目标到预报目标的平均距离</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;medAB_multiply_nB&lt;/font&gt;</strong></td> <td style="text-align: left;">每个预报目标格点到观测目标的距离总和</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;medBA_multiply_nA&lt;/font&gt;</strong></td> <td style="text-align: left;">每个观测目标格点到预报目标的距离总和</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;GbetaAB&lt;/font&gt;</strong></td> <td style="text-align: left;">评分函数 GBeta(A,B)的取值,见上文公式</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;GbetaBA&lt;/font&gt;</strong></td> <td style="text-align: left;">评分函数 GBeta(B,A)的取值,见上文公式</td> </tr> <tr> <td style="text-align: left;"><strong>beta</strong></td> <td style="text-align: left;">参数中所使用的beta值</td> </tr> <tr> <td style="text-align: left;"><strong>alpha</strong></td> <td style="text-align: left;">参数中所使用的alpha值</td> </tr> <tr> <td style="text-align: left;"><strong>threshold</strong></td> <td style="text-align: left;">数值向量,给出阈值的值和所使用的规则</td> </tr> <tr> <td style="text-align: left;"><strong>data_name</strong></td> <td style="text-align: left;">字符向量,给出用于X和Xhat的对象名称</td> </tr> </tbody> </table> <pre><code class="language-python">result = mem.space.gbeta.Gbeta_score(grd_ob.values.squeeze(), grd_fo.values.squeeze(), threshold = 0.1) pprint.pprint(result)</code></pre> <pre><code>{'&amp;quot;nAnB_2nAB': 33753.0, 'GbetaAB': 0.1830766441402144, 'GbetaBA': 0.9959323438632971, 'alpha': 0, 'beta': 16569095841.0, 'medAB': 6.818879813471266, 'medAB_multiply_nB': 445736.5356469897, 'medBA': 0.5185276454453899, 'medBA_multiply_nA': 19904.72072571218, 'nA': 38387.0, 'nAB': 35001, 'nB': 65368.0, 'threshold': 0.1}</code></pre> <h2>GbetaIL评分</h2> <p>&lt;font face=&quot;黑体&quot; color=Blue size=3&gt;<strong>GbetaIL_score(ob, fo, threshold, beta= None, alpha = 0, w = 0.5)</strong>&lt;/font&gt; </p> <p>(2)GbetaIL被定义为 </p> <p>GbetaIL(A,B) = w<em>Gbeta + (1 - w)</em>theta(A, B)</p> <p>其中theta是零和排序后的强度值之间的线性相关系数的最大值;此部分通过调用qqplot来执行。如果两组中的点数不同(即如果nA != nB),则将较大的集合线性插值为与较小的集合相同大小。如果两个字段都为空,则theta = 1。如果字段A为空,则theta = 1 - (nB / N),其中N是域的大小。类似地,如果字段B为空。其基本原理是,如果一个场为空,而另一个场的非零点非常少,则两个场比如果另一个字段有很多点更相似。 </p> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;ob&lt;/font&gt;</strong></td> <td style="text-align: left;">观测数据矩阵,一维或二维numpy数组</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;fo&lt;/font&gt;</strong></td> <td style="text-align: left;">预报数据矩阵,一维或二维numpy数组,shape和观测数据线条</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;threshold&lt;/font&gt;</strong></td> <td style="text-align: left;">阈值</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;beta&lt;/font&gt;</strong></td> <td style="text-align: left;">单个数值,定义了y = y1y2或y = y1y2(1+y3)中的上限,决定了指标减小的速度。默认值是域大小的一半的平方</td> </tr> <tr> <td style="text-align: left;"><strong>alpha</strong></td> <td style="text-align: left;">单个数值,定义了y = y1y2或y = y1y2(1+y3)中的下限,决定了何时构成完美匹配。默认值为零要求两个字段完全相同,在大多数情况下是理想状态</td> </tr> <tr> <td style="text-align: left;"><strong>w</strong></td> <td style="text-align: left;">仅对GbetaIL 适用,介于零和一之间的单个数字,描述在GbetaIL的定义中给第一个项多少权重</td> </tr> </tbody> </table> <p>&lt;font face=&quot;黑体&quot; color=Blue size=3&gt;<strong>输出结果说明</strong>&lt;/font&gt; </p> <p><strong>计算两个场的线性组合:(i) 两个场之间的重叠量和 (ii) 平均误差距离</strong> </p> <table> <thead> <tr> <th style="text-align: left;">关键词</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;nA&lt;/font&gt;</strong></td> <td style="text-align: left;">实况超阈值的格点数</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;nB&lt;/font&gt;</strong></td> <td style="text-align: left;">预报超阈值的格点数</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;nAB&lt;/font&gt;</strong></td> <td style="text-align: left;">命中格点数</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;nAnB_2nAB&lt;/font&gt;</strong></td> <td style="text-align: left;">nA+nB- 2×nAB, 即漏报+空报数</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;medAB&lt;/font&gt;</strong></td> <td style="text-align: left;">预报目标到观测目标的平均距离</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;medBA&lt;/font&gt;</strong></td> <td style="text-align: left;">观测目标到预报目标的平均距离</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;medAB_multiply_nB&lt;/font&gt;</strong></td> <td style="text-align: left;">每个预报目标格点到观测目标的距离总和</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;medBA_multiply_nA&lt;/font&gt;</strong></td> <td style="text-align: left;">每个观测目标格点到预报目标的距离总和</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;GbetaAB&lt;/font&gt;</strong></td> <td style="text-align: left;">评分函数 GBeta(A,B)的取值,见上文公式</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;GbetaBA&lt;/font&gt;</strong></td> <td style="text-align: left;">评分函数 GBeta(B,A)的取值,见上文公式</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;corrcoef_sorted&lt;/font&gt;</strong></td> <td style="text-align: left;">对观测和预报的目标格点的降水量进行排序,由于观测和预报的序列长度不一样,所以按顺序分别对观测和预报取100个分位值,在计算两个分位值序列的相关系数</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;GbetaIL&lt;/font&gt;</strong></td> <td style="text-align: left;">评分函数 GbetaIL(A,B)的取值,见上文公式</td> </tr> <tr> <td style="text-align: left;"><strong>beta</strong></td> <td style="text-align: left;">参数中所使用的beta值</td> </tr> <tr> <td style="text-align: left;"><strong>alpha</strong></td> <td style="text-align: left;">参数中所使用的alpha值</td> </tr> <tr> <td style="text-align: left;"><strong>threshold</strong></td> <td style="text-align: left;">数值向量,给出阈值的值和所使用的规则</td> </tr> <tr> <td style="text-align: left;"><strong>data_name</strong></td> <td style="text-align: left;">字符向量,给出用于X和Xhat的对象名称</td> </tr> </tbody> </table> <pre><code class="language-python">result = mem.space.gbeta.GbetaIL_score(grd_ob.values.squeeze(), grd_fo.values.squeeze(), threshold = 0.1) pprint.pprint(result)</code></pre> <pre><code>{'&amp;quot;nAnB_2nAB': 33753.0, 'GbetaAB': 0.1830766441402144, 'GbetaBA': 0.9959323438632971, 'GbetaIL': 0.4948583485582582, 'alpha': 0, 'beta': 16569095841.0, 'corrcoef_sorted': 0.9897166971165164, 'medAB': 6.818879813471266, 'medAB_multiply_nB': 445736.5356469897, 'medBA': 0.5185276454453899, 'medBA_multiply_nA': 19904.72072571218, 'nA': 38387.0, 'nAB': 35001, 'nB': 65368.0, 'threshold': 0.5, 'weights': [0.5, 0.5]}</code></pre> <h2>G2IL评分</h2> <p>&lt;font face=&quot;黑体&quot; color=Blue size=3&gt;<strong>G2IL_score(ob, fo, threshold, beta= None, alpha = 0)</strong>&lt;/font&gt; </p> <p>(3)G2betaIL被定义为 </p> <p>G2betaIL(A,B) = max(1 - (y1 <em> y2 </em>(1 + y3 ))/\beta, 0)</p> <p>其中y1和y2如上所述,y3是集合A和B中排序值之间的平均绝对差,类似于GbetaIL。如果nA = nB = 0,则y3 = 0。如果nA或nB中仅有一个为零,则使用另一个集合的最大强度的绝对值。其基本原理是,这个值代表了最严重的错误,因此如果它很大,那么差异将被惩罚得更多。</p> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;ob&lt;/font&gt;</strong></td> <td style="text-align: left;">观测数据矩阵,一维或二维numpy数组</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;fo&lt;/font&gt;</strong></td> <td style="text-align: left;">预报数据矩阵,一维或二维numpy数组,shape和观测数据线条</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;threshold&lt;/font&gt;</strong></td> <td style="text-align: left;">阈值</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;beta&lt;/font&gt;</strong></td> <td style="text-align: left;">单个数值,定义了y = y1y2或y = y1y2(1+y3)中的上限,决定了指标减小的速度。默认值是域大小的一半的平方</td> </tr> <tr> <td style="text-align: left;"><strong>alpha</strong></td> <td style="text-align: left;">单个数值,定义了y = y1y2或y = y1y2(1+y3)中的下限,决定了何时构成完美匹配。默认值为零要求两个字段完全相同,在大多数情况下是理想状态</td> </tr> </tbody> </table> <p>&lt;font face=&quot;黑体&quot; color=Blue size=3&gt;<strong>输出结果说明</strong>&lt;/font&gt; </p> <p><strong>计算两个场的线性组合:(i) 两个场之间的重叠量和 (ii) 平均误差距离</strong> </p> <table> <thead> <tr> <th style="text-align: left;">关键词</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;nA&lt;/font&gt;</strong></td> <td style="text-align: left;">实况超阈值的格点数</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;nB&lt;/font&gt;</strong></td> <td style="text-align: left;">预报超阈值的格点数</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;nAB&lt;/font&gt;</strong></td> <td style="text-align: left;">命中格点数</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;nAnB_2nAB&lt;/font&gt;</strong></td> <td style="text-align: left;">nA+nB- 2×nAB, 即漏报+空报数</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;medAB&lt;/font&gt;</strong></td> <td style="text-align: left;">预报目标到观测目标的平均距离</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;medBA&lt;/font&gt;</strong></td> <td style="text-align: left;">观测目标到预报目标的平均距离</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;medAB_multiply_nB&lt;/font&gt;</strong></td> <td style="text-align: left;">每个预报目标格点到观测目标的距离总和</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;medBA_multiply_nA&lt;/font&gt;</strong></td> <td style="text-align: left;">每个观测目标格点到预报目标的距离总和</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;GbetaAB&lt;/font&gt;</strong></td> <td style="text-align: left;">评分函数 GBeta(A,B)的取值,见上文公式</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;GbetaBA&lt;/font&gt;</strong></td> <td style="text-align: left;">评分函数 GBeta(B,A)的取值,见上文公式</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;rmse_sorted&lt;/font&gt;</strong></td> <td style="text-align: left;">对观测和预报的目标格点的降水量进行排序,由于观测和预报的序列长度不一样,所以按顺序分别对观测和预报取100个分位值,再计算两个分位值序列的rmse</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;G2IL&lt;/font&gt;</strong></td> <td style="text-align: left;">评分函数 G2IL(A,B)的取值,见上文公式</td> </tr> <tr> <td style="text-align: left;"><strong>beta</strong></td> <td style="text-align: left;">参数中所使用的beta值</td> </tr> <tr> <td style="text-align: left;"><strong>alpha</strong></td> <td style="text-align: left;">参数中所使用的alpha值</td> </tr> <tr> <td style="text-align: left;"><strong>threshold</strong></td> <td style="text-align: left;">数值向量,给出阈值的值和所使用的规则</td> </tr> <tr> <td style="text-align: left;"><strong>data_name</strong></td> <td style="text-align: left;">字符向量,给出用于X和Xhat的对象名称</td> </tr> </tbody> </table> <pre><code class="language-python">result = mem.space.gbeta.G2IL_score(grd_ob.values.squeeze(), grd_fo.values.squeeze(), threshold = 0.1) pprint.pprint(result)</code></pre> <pre><code>{'&amp;quot;nAnB_2nAB': 33753.0, 'G2IL': 0.9999946927796994, 'GbetaAB': 0.1830766441402144, 'GbetaBA': 0.9959323438632971, 'alpha': 0, 'beta': 16569095841.0, 'medAB': 6.818879813471266, 'medAB_multiply_nB': 445736.5356469897, 'medBA': 0.5185276454453899, 'medBA_multiply_nA': 19904.72072571218, 'nA': 38387.0, 'nAB': 35001, 'nB': 65368.0, 'rmse_sorted': 2.8277593787031856, 'threshold': 0.5}</code></pre> <pre><code class="language-python"></code></pre>

页面列表

ITEM_HTML