最佳邻域检验
<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><font face="黑体" size=4><strong>计算步骤:</strong></font><br />
<font face="黑体" size=3>1、将格点场按照设定的阈值进行二值化,大于阈值的格点设为1,小于阈值的设为0;</font><br />
<font face="黑体" size=3>2、对二值化后的格点场进行平滑,卷积核类型默认为"boxcar";</font><br />
<font face="黑体" size=3>3、根据定义的目标函数求不同阈值和不同平滑参数连续值下的最优解,默认的方法为"L-BFGS-B";</font> </p>
<p><font face="黑体" color=Blue size=3><strong>look_pp = pphindcast2d(grd_ob,grd_fo,thresholds,compare = ">=",which_score = "ets",level = [1,3,5],
smooth_fun ="hoods2dsmooth",show = False )</strong></font> </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><font face="黑体" color=Blue size=5>grd_ob</font></strong></td>
<td style="text-align: center;">网格数据形式的观测数据,只支持包含单一平面场的网格数据</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>grd_fo</font></strong></td>
<td style="text-align: center;">网格数据形式的预报数据,只支持包含单一平面场的网格数据</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=Blue size=5>thresholds</font></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 = ">="表示将大于阈值的格点值替换成1,其他值替换为0</td>
</tr>
<tr>
<td style="text-align: left;"><strong>which_score</strong></td>
<td style="text-align: center;">验证分数,通过vxstats函数计算,可选项有"bias", "ts", "ets", "pod", "far", "f", "hk", "bcts", "bcets", "mse"</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>
<font face="黑体" color=green size=4><strong>返回结果内容说明</strong></font><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><font face="黑体" color=green size=5>Pthresh</font></strong></td>
<td style="text-align: center;">给出应用于每个级别(行)和阈值(列)的 Pthresh 值</td>
</tr>
<tr>
<td style="text-align: left;"><strong><font face="黑体" color=green size=5>value</font></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=&quot;2020072611&quot;, dtime=0, data_name=&quot;OBS&quot;)
grd_fo = meb.read_griddata_from_nc(path_fo, grid=grid1, time=&quot;2020072608&quot;, dtime=3, data_name=&quot;ECMWF&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>