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

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

[复制链接]
" X, o3 A$ |9 L. s0 `5 ]6 R, {

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

5 a$ H- |2 v6 l( K+ ~
/ p0 g6 D( m3 A& v( D3 c# R1 @" B

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

9 s, M# e% {: w: E$ x! T Q! C" z% f( U2 j' L3 n

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

% r8 O' t, ]' z0 U' w4 M# j & ]9 _' A9 M# O4 n

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

! j2 M& K6 `) Z1 U$ v. a

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

! ^# `9 W* Z* N. @# N( ?" o

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

2 W2 I2 ^" X q5 D) z: G
def norm_fit(data): $ N ~0 ~: f) h; e7 s loc, scale = st.norm.fit(data)( p. J1 t. m9 ~" P' S2 G return np.array([loc, scale])
8 |2 U' J. ~" B) B" Q) j

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

4 N2 U" T8 A, s

(2)xarray分块

) O) _, x, N( p7 I
x = xr.DataArray(rs.randn(500, 20, 1500, 1500), dims=["time", "lev", "lat","lon"]) 0 C) u( g L7 i2 Z/ ~3 m1 I# Y+ [3 p2 W x = x.chunk({"lev":5, "lat":100,"lon":100})
6 v. e' T* n9 u( n

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

/ }* a7 Q. d4 h) c2 ]

(3)xarray.apply_ufunc函数

3 z; }- Z" I( m. u8 X
result = xr.apply_ufunc(norm_fit,; @$ s, O" J& G+ W; @! M, }/ K x, / g1 {3 Y V9 B: M7 H. g; k input_core_dims=[["time"]],4 _$ w& X3 i0 s4 R" f* }! i, U output_core_dims=[["paras"]], 4 H& l9 E4 Z# Z: [" A; W/ O dask="parallelized"," Q9 u# x/ J9 N, |6 D0 u" j output_dtypes=[np.float],/ Z, S, p! z+ g, u0 u dask_gufunc_kwargs={output_sizes:{"paras":2}}) w' f% ~, U( g7 B# s( B )
! g& ]0 ]$ r: ?& V6 T5 p$ c8 `+ ^

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

0 I3 H, j4 w% l3 s; [ 9 R4 B* z8 p7 y6 Z p( e! N: B$ S

以下是全部代码:

9 P) X' U* h1 }! R# r7 D0 r
from scipy import stats as st , E/ m/ f# ~; i: @: B. ]3 h7 F" Z5 [1 a. H: b import xarray as xr# ]4 A8 j+ t- D2 E1 a9 P import dask3 t1 j6 s' O' U9 {8 P import numpy as np 4 S4 i2 }9 {+ b, D2 F u& T- p from dask.diagnostics import ProgressBar" j# w4 I8 N/ B1 j* U / ?0 L h/ ~2 ?% e' p) M def norm_fit(data): ( p; @% F$ v! g8 M! F! B( w0 n loc, scale = st.norm.fit(data)# a( q! ~4 E& E. I4 j1 P return np.array([loc, scale]); X& m/ O8 b: o; x % {* w t7 }6 U V% R rs = np.random.RandomState(0)5 f+ h1 _2 O4 C3 \8 `- D x = xr.DataArray(rs.randn(500, 20, 1500, 1500), dims=["time", "lev", "lat","lon"])3 s3 n A! b' b2 Z$ c x = x.chunk({"lev":5, "lat":100,"lon":100})+ {% J. o$ }- H- ?' h' I1 q 3 G) c) X- h% q #使用apply_ufunc计算,并用dask的并行计算 ) d: W- K8 ^/ O0 q result = xr.apply_ufunc(norm_fit, Q9 C6 N! m) E: u* Q, {7 U, ^ x,8 F& t/ i3 I. a: L7 i- _9 U input_core_dims=[["time"]],! U+ t5 K3 _* D- ^% E- _ output_core_dims=[["paras"]], & Y7 a4 o( Z- [( p4 d# z, I dask="parallelized",* k4 l/ F- A- k+ ~2 R2 d) H1 e2 u' ~ output_dtypes=[np.float],/ Y7 j3 `- A: |8 r; S/ c2 [' m+ Y' X dask_gufunc_kwargs={output_sizes:{"paras":2}} : R% [1 z) J' j )3 e0 L) h I3 T* @% h : k/ E5 n7 w7 Z9 {6 Z' K #compute进行真实的计算并显示进度 2 m: M5 I3 K+ [ with ProgressBar():+ O* q5 S3 x( ?/ z result = results.compute() 3 P; ?2 K$ r& v+ E- \( E& ~4 C5 T) e" P8 V% P' ~0 b' G ?4 \# L #结果冲命名保存到nc文件: O& r3 q. c6 P& R5 K2 A result = result.rename("norm_paras")4 c9 I( u% Q* U3 e result = result.to_netcdf("norm_fit_paras.nc",compute=False) 9 b; P' s6 _# m9 h! N with ProgressBar(): - D, l3 s- l0 [ result.compute()
8 i1 ], u9 Z% d6 @+ o# l

转自:气海同途

. w3 \0 P, f8 [5 p) Y2 P

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

# d+ O6 d! ?" J) p ; k5 G0 E+ W/ D* K- R4 X* z$ u, K

推荐:

1 v; H( C/ h/ Y" v& T& A' K

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

/ O! F5 ^) d3 Z5 i1 ?* O7 r: X% g

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

% c# p0 d0 `( D$ w+ d- D/ }

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

1 S5 C+ e# _% n r6 ^

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

& S. G6 u0 `. h) P; Q( W$ u! Q4 E

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

& x% y m2 q3 R% ~& b

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

, ?' ]) y$ y! B0 F; q" a

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

; J4 l# S; b8 I x5 ^# N 2 d" Q" F$ ^8 ^8 t: W& u( {( ~6 z( P, e. P0 A % Q2 W: l0 g$ G0 q, ` ; |. _% [% q0 s" @3 [& J. [0 y
回复

举报 使用道具

相关帖子

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