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

[复制链接]
0 J" A, ^2 e4 ]5 G, q8 d! d

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

+ Z+ \$ u* Z c0 \, [) e. E- T5 i
/ B% B+ f$ K, Y- {$ p: m

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

/ y. N6 i3 ~# Q2 g, k6 z% @2 Z( |" t $ l5 l1 m* D- M2 ?3 K4 x* E, }

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

, l3 B+ S6 E% w8 O; }4 Q) P4 A0 u- w: o- z( ^# ]0 y# g8 B

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

4 I3 y; T- _- r" q/ l3 Z+ y

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

8 K& Z/ ?# w' b* P

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

6 X+ L$ q& i/ K
def norm_fit(data):- P/ b5 m8 Y& f5 ]! m: D loc, scale = st.norm.fit(data) 3 S3 _, ~+ p0 G return np.array([loc, scale])
5 H7 X& ]0 f; i5 r% }1 t' S d

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

/ g/ ]7 L3 E1 l8 R C( ]9 B

(2)xarray分块

, Y7 I! o/ c9 G q4 F
x = xr.DataArray(rs.randn(500, 20, 1500, 1500), dims=["time", "lev", "lat","lon"]), I0 {# W9 s5 ?8 F' d; u9 X x = x.chunk({"lev":5, "lat":100,"lon":100})
' M" w7 |# B! e, H) a- Y

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

1 O( C- r& D& K* V4 ~$ h' \

(3)xarray.apply_ufunc函数

) H1 p# k+ ?$ k' \
result = xr.apply_ufunc(norm_fit,; [) n/ q' g- u) _( ? Q. h7 K; r x, 3 P. K, f" k9 k8 z( | input_core_dims=[["time"]], / q( t- L3 Q7 z) X* ` output_core_dims=[["paras"]], X, L+ n! ~8 [$ G/ y dask="parallelized",: C0 `+ W; M2 v9 t; P3 _ output_dtypes=[np.float], % ~9 U" x S# U9 j dask_gufunc_kwargs={output_sizes:{"paras":2}} 8 h1 M# i( t7 ]3 x )
8 h e* Z$ v p$ q j9 Y7 @4 U6 g

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

2 Q- l* y6 }% [0 z ; a5 ]- t$ E! D: G @. A# G

以下是全部代码:

/ ^: B% J4 b. D& h# s) ]
from scipy import stats as st 4 ~7 \- @) c- R! @4 V: y( W - M/ U3 _3 J O; A" G/ H import xarray as xr - U: D4 c. ^3 a# I8 ]- @/ | import dask " e! q, `' v5 q% X* B import numpy as np6 ]. i$ m1 Z4 Y; ?4 K- @& p& ]' x from dask.diagnostics import ProgressBar S# K6 `. H! y# S ; `' V- f( g/ m) w8 x$ `: t def norm_fit(data): 7 i: k' }: t: s/ M# k; ~8 H& F loc, scale = st.norm.fit(data); Q/ b; ]/ W9 ?! @2 e return np.array([loc, scale]) 8 `, A. E+ K0 P# C9 Z ' D# c6 D0 n( R9 K* c" p6 x rs = np.random.RandomState(0) T' C2 J/ O7 \4 L1 k2 y5 A x = xr.DataArray(rs.randn(500, 20, 1500, 1500), dims=["time", "lev", "lat","lon"]) 4 z! F$ O9 l$ V x = x.chunk({"lev":5, "lat":100,"lon":100}) - O, ?3 Q4 A3 p* i. W9 `5 ]3 K& F( B #使用apply_ufunc计算,并用dask的并行计算5 A- }( v* p- S8 w result = xr.apply_ufunc(norm_fit,; B t7 c, D6 e( w7 M7 y) [: f* f6 \ x,8 P/ l3 g, S8 U* r input_core_dims=[["time"]], 2 [: ~. I' R4 A! V" Z9 B1 M output_core_dims=[["paras"]], $ i( \4 w$ k* [- _ dask="parallelized",, }3 m6 G+ h* j5 r output_dtypes=[np.float],* x6 F! [ t5 O1 S' }& ]1 Z. Z( G. A dask_gufunc_kwargs={output_sizes:{"paras":2}}! G( u! C8 h% m! i3 G: O$ e )0 k1 U( ]1 H: h* \ ' `. |4 |- Q/ d) z1 _8 |8 ` #compute进行真实的计算并显示进度 / @) q4 m2 v/ ]' E with ProgressBar(): 4 ^4 z- H& R5 R result = results.compute() 0 y8 e* L+ I! t* R: k% X/ a+ @4 D, J* f" J0 X0 ?- G* F5 E #结果冲命名保存到nc文件 a- o x' p) H, S/ G# v1 k7 R result = result.rename("norm_paras") 0 K& |) S# l2 ]/ f result = result.to_netcdf("norm_fit_paras.nc",compute=False)+ X/ w2 l& j; r( I with ProgressBar(): , k! |+ r# l% T( c- n! b! Q0 @ result.compute()
/ i: D$ w. d& W! | N4 G9 @

转自:气海同途

. S3 H$ b" Z; s, u& N2 H

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

3 W2 k, s( W* e7 r9 s$ j1 n& i5 p ; L. s2 O( w) ^. m' Z

推荐:

1 S& W6 i- h0 m3 H8 b

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

4 d) t+ g* q- [- Y6 n( k% ?3 b4 V

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

* j2 b3 O6 ]9 f2 @

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

' B. W; u# {9 k9 g( {8 F9 T* L6 R

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

7 Z! \3 b& a! `2 V$ ^

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

% [- u3 N3 g8 X8 w

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

) C+ j/ j: S, w- G X1 V: V

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

0 z' C( }2 F% n 9 A% P# Q- [# ^1 Y3 L . _$ S3 h4 d0 c# {4 A2 c$ l3 ?4 a- N6 n 3 q' N. l2 `& ?3 n# A
回复

举报 使用道具

相关帖子

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