通用计算tools
<p>[TOC]</p>
<h1>差分计算</h1>
<p>地理空间差分(地理空间梯度),使用xarray的geospatial_gradient方法,代码示例如下:</p>
<pre><code class="language-python">geospatial_gradient(stda, dx=None, dy=None)</code></pre>
<p><font size="4"><b>参数说明</b></font></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">stda</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">任意stda数据</td>
</tr>
<tr>
<td style="text-align: left;">dx</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">np.array, optional</td>
<td style="text-align: left;">指定`stda中网格经度方向点之间间距的数组或标量序列(必须带units为长度单位)`,默认按经纬度坐标计算球面间距。 Defaults to None</td>
</tr>
<tr>
<td style="text-align: left;">dy</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">np.array, optional</td>
<td style="text-align: left;">指定`stda中网格纬度方向点之间间距的数组或标量序列(必须带units为长度单位)`,默认按经纬度坐标计算球面间距。 Defaults to None</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align: left;">返回值</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">df/dx</td>
<td style="text-align: left;">对纬度轴的差分结果</td>
</tr>
<tr>
<td style="text-align: left;">df/dy</td>
<td style="text-align: left;">对经度轴的差分结果</td>
</tr>
</tbody>
</table>
<p><font size="4"><b>调用示例</b></font></p>
<pre><code class="language-python">init_time = datetime(2023,5,4,8)
tmp = cmadaas.get_model_3D_grids(data_name=&#039;ecmwf_hr&#039;,var_name=&#039;tmp&#039;,
init_time=init_time,fhours=[24], extent = [70,140,10,60], levels=[500])
dfdx, dfdy = metdig.cal.tools.geospatial_gradient(tmp)
print(dfdx)
print(dfdy)</code></pre>
<p><font size="4"><b>输出信息</b></font></p>
<pre><code class="language-python">&lt;xarray.DataArray &#039;tmp&#039; (member: 1, level: 1, time: 1, dtime: 1, lat: 251,
lon: 351)&gt;
array([[[[[[-4.994038e-06, ..., -1.747913e-05],
...,
[ 9.836338e-06, ..., 9.133742e-06]]]]]], dtype=float32)
Coordinates:
* level (level) int64 500
* dtime (dtime) int32 24
* time (time) datetime64[ns] 2023-05-04T08:00:00
* member (member) object &#039;ecmwf_hr&#039;
* lat (lat) float64 10.0 10.2 10.4 10.6 10.8 ... 59.2 59.4 59.6 59.8 60.0
* lon (lon) float64 70.0 70.2 70.4 70.6 70.8 ... 139.4 139.6 139.8 140.0
Attributes:
data_source: cmadaas
level_type: high
var_name: df/dx
var_cn_name:
var_units: kelvin / meter
valid_time: 0
&lt;xarray.DataArray &#039;tmp&#039; (member: 1, level: 1, time: 1, dtime: 1, lat: 251,
lon: 351)&gt;
array([[[[[[ 6.674656e-06, ..., 1.510580e-05],
...,
[-9.133740e-06, ..., 7.728549e-06]]]]]], dtype=float32)
Coordinates:
...
var_name: df/dy
var_cn_name:
var_units: kelvin / meter
valid_time: 0</code></pre>
<h1>积分计算</h1>
<p>给定维度上的积分计算,使用xarray的integrate方法,基于梯形法则,代码示例如下:</p>
<pre><code class="language-python">integrate(stda, axes)</code></pre>
<p><font size="4"><b>参数说明</b></font></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">stda</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">stda</td>
<td style="text-align: left;">任意stda数据</td>
</tr>
<tr>
<td style="text-align: left;">axes</td>
<td style="text-align: left;"><font color="red">是</font></td>
<td style="text-align: left;">str</td>
<td style="text-align: left;">stda 维度名称 e.g. 'member', 'level', 'time', 'dtime', 'lat', 'lon'</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th style="text-align: left;">返回值</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">int</td>
<td style="text-align: left;">积分结果</td>
</tr>
</tbody>
</table>
<p><font size="4"><b>调用示例</b></font></p>
<pre><code class="language-python">init_time = datetime(2023,5,4,8)
tmp = cmadaas.get_model_3D_grids(data_name=&#039;ecmwf_hr&#039;,var_name=&#039;tmp&#039;,
init_time=init_time,fhours=[24], extent = [70,140,10,60], levels=[200,500,600])
_tmp = metdig.cal.tools.integrate(tmp, axes=&#039;level&#039;)
print(_tmp)</code></pre>
<p><font size="4"><b>输出信息</b></font></p>
<pre><code class="language-python">&lt;xarray.DataArray &#039;tmp&#039; (member: 1, level: 1, time: 1, dtime: 1, lat: 251,
lon: 351)&gt;
array([[[[[[ 8405.44204712, 8408.95767212, 8410.91079712, ...,
8143.33267212, 8168.72329712, 8228.87954712],
[ 8366.37954712, 8377.31704712, 8401.14517212, ...,
8155.05142212, 8161.69204712, 8203.87954712],
[ 8337.86392212, 8340.59829712, 8371.06704712, ...,
8148.80142212, 8174.58267212, 8220.28579712],
...,
[14190.60134888, 14216.77322388, 14228.49197388, ...,
14072.24197388, 14061.69509888, 14046.46072388],
[14049.58572388, 14099.19509888, 14143.72634888, ...,
14098.80447388, 14075.75759888, 14054.66384888],
[13900.36697388, 13940.21072388, 13994.89822388, ...,
14087.47634888, 14057.78884888, 14040.60134888]]]]]])
Coordinates:
* level (level) int64 0
* dtime (dtime) int32 24
* time (time) datetime64[ns] 2023-05-04T08:00:00
* member (member) object &#039;ecmwf_hr&#039;
* lat (lat) float64 10.0 10.2 10.4 10.6 10.8 ... 59.2 59.4 59.6 59.8 60.0
* lon (lon) float64 70.0 70.2 70.4 70.6 70.8 ... 139.4 139.6 139.8 140.0</code></pre>