收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

海洋数据处理软件 -海洋数据统计

[复制链接]
$ u( y5 w7 D' M( I$ y3 P2 |/ C

气象海洋领域,常常会涉及到大规模的数据处理,比如高时空分辨率的模式数据、雷达数据和卫星数据等。

( y, W+ Y2 E; P. t
* v; p) U& [7 g( {6 g

大部分情况,我们一般只会涉及小规模数据处理,对计算效率并不会太过追求。但是当数据量变大时,低效的数据处理所耗费的时间非常明显,因此高效的数据处理方式尤为重要。

% f5 N( U( g% M( N! u* W) Y, f1 _9 {8 | ]

本篇以拟合一个高维数据的正太分布参数为例,介绍如何使用xarray+dask加速数据处理。

o p- n0 J$ d2 q3 a 9 p0 V$ `1 Q* u0 q* s( y; m

数据维度X[time, lev, lat, lon],需要对三维空间每一点,沿着时间维度做正太分布拟合(正太分布拟合只是作为例子,这里可以定义你需要的操作函数)。

2 V& J9 I3 B# k

其中几个关键点解释一下:

9 f, B! ]# z- S, k- m

(1)首先定义拟合正太分布的函数

" r% t0 e$ w' g5 v& k
def norm_fit(data):, E! s3 o# u5 M3 l loc, scale = st.norm.fit(data)2 K# ?3 X; O4 y [ }1 b) j2 { return np.array([loc, scale])
' Q% N7 v* m# U& u0 L. C. P

这里需要注意的是,拟合的函数,输出参数,需要打包为一个数组。并且它的维度需要和后面aplly_ufun定义的输出维度一致。

3 l) l0 h* q5 x

(2)xarray分块

& P, a. h" H7 u' t- V8 c( j7 c. N
x = xr.DataArray(rs.randn(500, 20, 1500, 1500), dims=["time", "lev", "lat","lon"])+ g6 J5 ?; I8 n" C x = x.chunk({"lev":5, "lat":100,"lon":100})
' h' P* E* Y3 Z6 |2 G

xarray结合dask可以将一个大型数组分成一个个数据块(chunk),需要注意的是我们需要沿着时间维操作,拟合需要整个时间维度的数据,因此时间维time不能分块,只能对其他维度分块。

; K$ T/ Z: E( |9 ^5 V

(3)xarray.apply_ufunc函数

$ |8 v$ `% \! B& z( \
result = xr.apply_ufunc(norm_fit, , |( k& X4 E$ t: X/ `" S x, / m; o# _& Q/ t9 p4 \9 t input_core_dims=[["time"]],/ f- G. b7 ]0 r% M6 a3 {, i8 q( F7 T output_core_dims=[["paras"]],$ e! ~$ R" y0 A( A" O9 ?2 A dask="parallelized", # A- W1 i0 e: A) x8 ~, P3 h. m output_dtypes=[np.float],, F( }7 s% H5 n; q8 Z dask_gufunc_kwargs={output_sizes:{"paras":2}} & o$ u E/ v& p% w7 ?0 H& l )
2 m9 X5 N; _( }2 e& D" B+ E

apply_ufunc函数具体可以参考官网教程,这里只说使用时遇到的困难,即如何定义输出维度:输出维度是用output_core_dim定义的,将输出的拟合参数(期望和标准差)定义为paras维度,维度的大小为2,通过output_sizes参数设置。这样我们输入[time, lev, lat, lon]的数据,在每个空间点对时间维度拟合之后,输出的数据为[lev, lat, lon, paras]。(PS: 这里感谢深雨露大佬的指点)

0 A- u. E( {. L% H- F' C% ]( l% k: @2 I0 x/ C

以下是全部代码:

/ A: B" u) U5 u4 {: Q" ?" }
from scipy import stats as st 2 a" o. [9 c, f6 y9 k" K . o& d* F. M( S; O6 A- I import xarray as xr 4 ?' U0 A1 c f! G# i1 e4 ^* ~ import dask - ]0 C; B# P5 a8 F import numpy as np 2 D5 L: C+ T: Y8 r+ l from dask.diagnostics import ProgressBar. }; Z2 S1 r! w/ x1 l* a" d 1 [. F, H( g. ~% l# ~5 u: y def norm_fit(data):5 Q# c. T3 w" L% h7 D( O0 ] loc, scale = st.norm.fit(data)* {, N: J" h7 R* m* l return np.array([loc, scale]) ! t# o5 J+ C* }# W- T% t) u& b0 l6 B# ^" I rs = np.random.RandomState(0) ' F( K' G" A0 X$ S5 O& y x = xr.DataArray(rs.randn(500, 20, 1500, 1500), dims=["time", "lev", "lat","lon"]) 1 @, D3 e8 S. \% h% f x = x.chunk({"lev":5, "lat":100,"lon":100}) z! `7 o& x( q: [ 5 p- }% G6 [: T# J+ h# O* k #使用apply_ufunc计算,并用dask的并行计算 1 y9 f" `1 o6 a2 L result = xr.apply_ufunc(norm_fit, v" I4 Y, \$ E0 X x,6 {: t% |, v4 K input_core_dims=[["time"]],# X2 Z. L7 h5 \1 J+ y6 J% P' B output_core_dims=[["paras"]],1 X4 q9 ?* c" A5 S dask="parallelized",0 K& M2 F% I0 A5 X6 g output_dtypes=[np.float],7 l. l7 }% H5 Z$ l$ o8 O/ J! {- t dask_gufunc_kwargs={output_sizes:{"paras":2}} 5 i$ ]* w0 u* n0 O6 \ )4 r0 k- U; Y, g/ b 8 T% W7 s {0 S #compute进行真实的计算并显示进度9 v9 ~# t1 `) a8 O with ProgressBar(): ) e' @: ?( c+ C8 @' J7 t, D7 b result = results.compute() + k+ m" u# ^/ _: J, N8 R7 g* `4 Z. q; g; y2 D7 L1 e: T #结果冲命名保存到nc文件& n& E* w1 l% h. O result = result.rename("norm_paras"). B' n2 d# q, J9 j4 \- q6 H; ` result = result.to_netcdf("norm_fit_paras.nc",compute=False)! B8 i/ T: q8 H( K6 z8 i8 M: v# Q with ProgressBar():9 s- B9 P6 e: s5 G result.compute()
0 G' A# u5 R/ I O D% j: t; C

转自:气海同途

% W& c( F! s5 d( D6 v- q3 r% U

关注【Ai尚研修科研技术平台】公众号,查看更多课程安排及免费数据资料

* A( t0 m! d! ]8 e& E3 h - e& }1 f& [$ }

推荐:

' N _3 E! v) \

1、Python语言在地球科学领域中的应用实践技术应用

) G+ v7 N/ }4 X$ v4 Y

2、【夏令营】针对课题组人员AI培养计划:“开启AI科研之路”

5 \! b2 T) W' V" [3 p: } J

3、Python在气象与海洋中的实践技术应用精品课程

5 V; J+ U$ B; F0 H3 b6 b3 B

4、Python在WRF模型自动化运行及前后处理中的实践技术应用

$ n8 e( R5 Q' O v% ]% N. r

5、全套Python机器学习核心技术与案例分析实践应用视频

5 Y. ]1 R' q7 U( T0 [: {. @) a

6、全套区域高精度地学模拟-WRF气象建模、多案例应用与精美制图精品课程

$ l9 `1 c* j" d# h. x

7、WRF DA资料同化系统理论、运行与与变分、混合同化新方法技术应用视频教程

T: \' U) d) B H1 k x 1 V+ X4 j4 J- v! u( S ' ^; N! X% k$ d7 N) k9 g" A. _, W3 j+ y! N" R0 m+ Y 3 V7 {5 q0 a! v3 R$ ]
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
庄家真牛牛杂火锅
活跃在3 天前
快速回复 返回顶部 返回列表