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

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

[复制链接]
& q0 c" k i' w

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

7 e% _! Q% S7 e2 c; Y M- v& a
1 A5 J! ^! \) e) Y7 Q6 h

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

/ N" I* M. X+ k8 p, c( y ! ~' f" d7 F E/ k. [0 `0 A

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

( v/ ^# L# x$ K: ~# X0 Z, P- d( j * G9 P2 l) w8 q0 D% z+ e& F# F# m

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

4 K& M$ o# B8 M; \

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

: @" M: H7 M+ R/ j

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

6 L* D: Z9 D2 S; A" D8 v
def norm_fit(data): 8 ?* J/ g# C% e& ? loc, scale = st.norm.fit(data) - R4 n. P7 }2 n+ M# X& T* M" \ return np.array([loc, scale])
6 c3 _# o0 U* ^3 f

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

1 }4 Y; M. i( O; M7 U. A8 S B

(2)xarray分块

; n# n* a0 K. U: S- Z- f8 I
x = xr.DataArray(rs.randn(500, 20, 1500, 1500), dims=["time", "lev", "lat","lon"])1 j) U' X$ C2 t! P x = x.chunk({"lev":5, "lat":100,"lon":100})
5 X3 x3 v. ?6 ?& o* x# ] l

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

4 ~. x: G7 }8 s

(3)xarray.apply_ufunc函数

! h4 X4 y$ X9 J( h m/ U
result = xr.apply_ufunc(norm_fit, 0 w3 G4 }0 I% G0 Q8 { H1 O x,4 }" Z" i3 _: _+ G9 { input_core_dims=[["time"]],3 q2 m' K4 U9 {4 U2 f% h output_core_dims=[["paras"]], ; o5 ?. W: [* w$ z dask="parallelized",; X; f$ Z4 c0 `4 [0 d1 I6 m output_dtypes=[np.float],1 k0 ~1 u/ Z! H9 x dask_gufunc_kwargs={output_sizes:{"paras":2}} & w7 e& c5 G$ t: M )
5 F3 r; z, j. Q D9 p) V O0 ^; ^

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

5 R8 ^& Y& ~3 H' H7 c) @: Q 6 }1 u: b% g* [' k0 E. Y

以下是全部代码:

6 \# E! i% L' }" Y# I# ^! T
from scipy import stats as st" y- \4 p0 y2 L# d ! w: @% |* x9 V/ A" |( e- g9 w0 ~& k import xarray as xr7 `$ G! s/ u9 I' Q; U. ~/ C% O import dask 9 h1 D& Y$ u2 @2 H4 p import numpy as np ! g+ c1 i' z5 |' r: `; E4 q: U) m from dask.diagnostics import ProgressBar9 s# }: ?$ M* v8 [6 M5 r# P # F- X% Q$ w. L: l0 t5 P def norm_fit(data): 6 i% a6 J* V2 H7 q/ g$ I8 @ loc, scale = st.norm.fit(data)3 ^( k( w; Z* ` return np.array([loc, scale])" c- ^( ]7 q8 p$ Q2 r - H/ y2 w, E! S" F/ U1 L rs = np.random.RandomState(0) 1 c. T7 |) q4 B \& b+ E8 o x = xr.DataArray(rs.randn(500, 20, 1500, 1500), dims=["time", "lev", "lat","lon"])4 c# w* n1 Z+ k. k1 E x = x.chunk({"lev":5, "lat":100,"lon":100}) ' l& T1 U6 o% ]$ A( f/ H& m+ b# [; N- @" K) l* q #使用apply_ufunc计算,并用dask的并行计算 * a0 q4 u3 F" @7 L2 i7 U7 O result = xr.apply_ufunc(norm_fit,* I( r P1 G. f$ Z# \/ v7 v/ h x, & ?' O3 E# E( c3 } input_core_dims=[["time"]], $ b7 J4 x4 V2 X/ z1 p5 z4 G output_core_dims=[["paras"]], - x% J' j V) E5 l1 A dask="parallelized",! A X b7 n6 `. o4 S3 X6 R output_dtypes=[np.float],6 Z; a* c4 f" s' L6 ~5 S) E+ G, @ dask_gufunc_kwargs={output_sizes:{"paras":2}} + L+ T8 y- a8 ?5 t$ S9 D7 O )6 f6 P# Q7 j/ Z) @7 K+ k2 c; w % G! V. {+ o4 v: `7 h" j #compute进行真实的计算并显示进度 $ y/ T8 E7 Q* i with ProgressBar():" J/ A8 F; u9 [4 t; G; @, d result = results.compute() ' D3 ^' {8 w! x4 S+ F+ a* f2 ]2 {# z3 ]& R" O #结果冲命名保存到nc文件- ~0 N' C; k+ }7 K9 R% W result = result.rename("norm_paras") % I9 C, g* N! @+ E" p. Z result = result.to_netcdf("norm_fit_paras.nc",compute=False) 0 r" ~ \2 ^3 b- [& e) H6 [( m with ProgressBar():- S& v' y0 ?7 N, N4 Y2 K% t result.compute()
+ u: W, w5 {) f

转自:气海同途

: D* }! E$ Y: p0 U. X% z0 P1 A9 O

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

3 z1 A+ I1 Z* U/ Y) l1 e 5 v6 B1 A0 {+ L. D3 c$ ^' |

推荐:

! s+ Z" B0 X' i0 U

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

6 G- V- C$ J+ V$ x5 B0 P' ?- o

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

" V% c( g* D! x8 F# u! n1 J) c

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

$ L' K& ~ ]$ m5 d

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

8 N/ X) t, `( ^1 M( N

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

' z3 Q* y: q; O. D

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

/ k {& p s' N& ~

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

3 M7 C: Q+ P% I# P5 E$ R/ n' k: }$ ?. q) d1 G/ ? ) _9 r8 l- ~/ p2 q1 F* D0 X$ E ! O& t* R4 x7 c# y6 f P. [ ! N2 W0 R! s2 l' e, m/ P1 S
回复

举报 使用道具

相关帖子

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