meteva

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


最佳邻域检验

<p>[TOC]</p> <pre><code class="language-python">%matplotlib inline %load_ext autoreload %autoreload 2 import meteva.base as meb import meteva.method as mem import meteva.perspact as mps import numpy as np import pandas as pd import datetime import meteva</code></pre> <h1>pphindcast2d</h1> <p>最佳邻域检验(practically perfect hindcast neighborhood verification method),查找最佳阈值Pthresh,并计算该阈值所需的统计信息。 </p> <p>&lt;font face=&quot;黑体&quot; size=4&gt;<strong>计算步骤:</strong>&lt;/font&gt;<br /> &lt;font face=&quot;黑体&quot; size=3&gt;1、将格点场按照设定的阈值进行二值化,大于阈值的格点设为1,小于阈值的设为0;&lt;/font&gt;<br /> &lt;font face=&quot;黑体&quot; size=3&gt;2、对二值化后的格点场进行平滑,卷积核类型默认为&quot;boxcar&quot;;&lt;/font&gt;<br /> &lt;font face=&quot;黑体&quot; size=3&gt;3、根据定义的目标函数求不同阈值和不同平滑参数连续值下的最优解,默认的方法为&quot;L-BFGS-B&quot;;&lt;/font&gt; </p> <p>&lt;font face=&quot;黑体&quot; color=Blue size=3&gt;<strong>look_pp = pphindcast2d(grd_ob,grd_fo,thresholds,compare = &quot;&gt;=&quot;,which_score = &quot;ets&quot;,level = [1,3,5], smooth_fun =&quot;hoods2dsmooth&quot;,show = False )</strong>&lt;/font&gt; </p> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: center;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;grd_ob&lt;/font&gt;</strong></td> <td style="text-align: center;">网格数据形式的观测数据,只支持包含单一平面场的网格数据</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;grd_fo&lt;/font&gt;</strong></td> <td style="text-align: center;">网格数据形式的预报数据,只支持包含单一平面场的网格数据</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=Blue size=5&gt;thresholds&lt;/font&gt;</strong></td> <td style="text-align: center;">等级阈值列表</td> </tr> <tr> <td style="text-align: left;"><strong>compare</strong></td> <td style="text-align: center;">调用thresholder函数的时候用到的参数,与图像二值化有关,rule = &quot;&gt;=&quot;表示将大于阈值的格点值替换成1,其他值替换为0</td> </tr> <tr> <td style="text-align: left;"><strong>which_score</strong></td> <td style="text-align: center;">验证分数,通过vxstats函数计算,可选项有&quot;bias&quot;, &quot;ts&quot;, &quot;ets&quot;, &quot;pod&quot;, &quot;far&quot;, &quot;f&quot;, &quot;hk&quot;, &quot;bcts&quot;, &quot;bcets&quot;, &quot;mse&quot;</td> </tr> <tr> <td style="text-align: left;"><strong>levels</strong></td> <td style="text-align: center;">平滑参数的连续值</td> </tr> <tr> <td style="text-align: left;"><strong>smooth_fun</strong></td> <td style="text-align: center;">平滑方法</td> </tr> <tr> <td style="text-align: left;"><strong>show</strong></td> <td style="text-align: center;">布尔值,是否打印日志</td> </tr> </tbody> </table> <p><strong>————————————————————————————————————————————————————————————————————————————————————————————————————————————</strong> &lt;font face=&quot;黑体&quot; color=green size=4&gt;<strong>返回结果内容说明</strong>&lt;/font&gt;<br /> 不同阈值、不同平滑参数下的最佳阈值 </p> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: center;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=green size=5&gt;Pthresh&lt;/font&gt;</strong></td> <td style="text-align: center;">给出应用于每个级别(行)和阈值(列)的 Pthresh 值</td> </tr> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=green size=5&gt;value&lt;/font&gt;</strong></td> <td style="text-align: center;">给出为每个级别(行)和阈值(列)找到的 which.score 的值</td> </tr> <tr> <td style="text-align: left;"><strong>attribute</strong></td> <td style="text-align: center;">继承make_spatialVx的计算结果</td> </tr> <tr> <td style="text-align: left;"><strong>which_score</strong></td> <td style="text-align: center;">计算评分指数</td> </tr> <tr> <td style="text-align: left;"><strong>class</strong></td> <td style="text-align: center;">计算函数类别</td> </tr> <tr> <td style="text-align: left;"><strong>model_num/time_point</strong></td> <td style="text-align: center;">模式数/时次</td> </tr> </tbody> </table> <p><strong>参考示例</strong></p> <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 = 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, grid=grid1, time=&amp;quot;2020072608&amp;quot;, dtime=3, data_name=&amp;quot;ECMWF&amp;quot;) res = mem.space.Practically_Perfect_Hindcast(grd_ob,grd_fo,thresholds=[0.01, 50.01]) print(res)</code></pre> <pre><code>{'which_score': 'ets', 'value': array([[ 2.03870996e-01, -6.65936356e-05], [ 1.98308021e-01, -6.65936356e-05], [ 1.98906471e-01, -7.76934372e-05]]), 'Pthresh': array([[0.99999404, 0.99999404], [0.38196979, 0.38197204], [0.45008672, 0.29931779]]), 'time_point': 1, 'model_num': 1, 'class': 'pphindcast'}</code></pre>

页面列表

ITEM_HTML